一、秘钥交互秘钥交互即银行方与客户方互相传输秘钥的过程,其中客户方需向银行提供一个RSA的公钥,用于对客户发送的数字签名进行验签。银行向客户方提供一个3DES对称秘钥,用于对报文做加解密。一个RSA公钥,用于对银行返回的数字签名进行验签。接下来便是RSA的密钥,这个秘钥你可以使用openssl生成,或者直接使用java代码生成,或者采用其他工具,RSA秘钥生成代码供参考:注意秘钥生成出来是byte数组,不要去做其他转换。上面已经提到秘钥交互过程中使用的加密方法是DES算法。至于DES,建行《CCB_CCIP_企业现金管理直连客户应用接口规范》文档中,要求使用约定的秘钥:电子银行合约编号(取后10位,不足10位的,前面补0)+交换当日日期(YYMMDD6位),不过要注意的是,并不是直接使用这个作为DES的秘钥,因为DES的秘钥是8位的byte数组。要用建行文档中提供了一个方法asc2bin方法,把这个16位长度的字符串转换成8位的byte数组,这8位的byte数组作为DES秘钥。那么接下来就是DES的加解密方法:而解密方法就把上面方法中的这个定义换掉就可以以上就是加密的过程,接下来讲一下返回格式,建行要求通过流的形式返回。不要忘记需要在加密后的公钥数组前加000000.getBytes(),这里可以采用建行文档中提到的System.arraycopy()把两个byte[]拼接起来再返回,或者写输出流的时候先写000000.getBytes()再写加密后的秘钥。然后,企业这边下载建行的秘钥。企业这边涉及下载建行两个秘钥包括:1、建行联机交易的报文加解密会用到3DES(DESede)秘钥;2、验签会用到MD5withRSA算法的RSA公钥。同样的调用建行提供的url:建行返回过来同样会想上面一样做加密,所以接收后也需要做解密。二、报文交互1、交易请求建行的请求报文交互涉及三个参数:1)渠道客户号,上文中已提到是电子银行合约编号。2)交易请求报文,原报文经过3DES解密并Base64编码后的字符串。3)数字签名,原报文经过MD5WithRsa算法签名并Base64编码后的字符串。此处使用的秘钥为企业自己生成RSA私钥。3DES加密参考:同样的解密方法就把上面方法中的这个定义换掉就可以签名算法:验签:2、交易响应这里返回的截取方法就按建行提供的System.arraycopy方法去截取就可以了,解密方法上面已经给过了,这里给一下验签的方法: