本文链接:http://www.cnblogs.com/Charltsing/p/TripleDES.html
众所周知,java默认采用的TripleDES算法是ECB+PKCS#5填充方式。网上可以找到的vb6算法与这个不兼容。
有没有简便的方法实现两者之间的通用呢?
大家知道,C#是可以实现TripleDES算法的,所以可以在vba、vbs、vb6.0中调用.net的静态类来实现与java通用的加解密算法。
在vba中调用C#的 TripleDESCryptoServiceProvider,并设置Mode = CipherMode.ECB即可。
如果有其他问题,可以联系QQ564955427
***************************************************************************************************
需要注意的是,C#默认支持的是PKCS#7填充模式,在默认情况下和PKCS#5的填充是通用的,具体看下面的文字:
通过研读参考资料下面的参考资料可以发现两者定义的区别:
[Def] PKCS #7: Cryptographic Message Syntax Standard,
An RSA Laboratories Technical Note, Version 1.5. Revised November 1, 1993. http://www.cnblogs.com/midea0978/admin/ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-7.asc
[Inf] PKCS #5: Password-Based Encryption Standard,
An RSA Laboratories Technical Note, Version 1.5. Revised November 1, 1993. http://www.cnblogs.com/midea0978/admin/ftp://ftp.rsa.com/pub/pkcs/ascii/pkcs-5.asc
在PKCS5Padding中,明确定义Block的大小是8位,而在PKCS7Padding定义中,对于块的大小是不确定的,可以在1-255之间(块长度超出255的尚待研究),填充值的算法都是一样的:
value=k - (l mod k) ,K=块大小,l=数据长度,如果l=8, 则需要填充额外的8个byte的8
在.net中,例如TripleDESCryptoServiceProvider ,默认BlockSize=64bits=8bytes,所以在这种情况下在PKCS5Padding=PKCS7Padding。
如果在C#中自己定义了一个不是64bits的加密块大小,同时使用PKCS7Padding,那么在java中使用JDK标准的PKCS5Padding就不能解密了。