zoukankan      html  css  js  c++  java
  • 如何让vba与java的TripleDES算法通用

    本文链接: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就不能解密了。

  • 相关阅读:
    git add用法
    git删除指定文件夹
    git相关命令
    Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:5
    [程序员代码面试指南]数组和矩阵-子矩阵的最大累加和问题
    [程序员代码面试指南]二叉树问题-统计完全二叉树的节点数
    [排序]直接插入排序、希尔排序
    [程序员代码面试指南]判断字符数组中是否所有字符只出现一次(堆排序)
    [SpringBoot项目]笔记
    [计算机网络]知识点
  • 原文地址:https://www.cnblogs.com/Charltsing/p/TripleDES.html
Copyright © 2011-2022 走看看