日期:2014-05-18  浏览次数:20985 次

单倍长密钥算法和双倍长密钥算法的C#实现?
单倍长密钥算法和双倍长密钥算法的C#实现?
用C#实现的单倍长密钥DES、双倍长密钥3DES和Mac计算 .
用于银联方面的,请问哪位哥哥妹妹帮助小弟一下,这边急用,
关系到每个月的米了,谁能给个代码的实例啊,或者源码,
或者有链接帮助,小弟在此拜谢了。。。

------解决方案--------------------
最近也在研究,源码没有,参考一下
System.Security.Cryptography.DES, 
System.Security.Cryptography.TripleDES, 
System.Security.Cryptography.MACTripleDES,
注意默认的填充算法跟PBOC不兼容
可能要自己填充80 00 .., 然后使用NO_PAD模式

------解决方案--------------------
加密首先涉及到填充,因为被加密数据未必都是8字节对齐的,所以必须填充到8字节的倍数,PBOC用的是ISO9797的填充算法,即首先填充一个80,如果仍然不能对齐,再填充若干个00,这个算法库里面不支持,所以必须自己实现,比如0102030405要加密,首先要填充成0102030405800000
第二个涉及加密模式,CBC or ECB, CBC比ECB复杂在每块多一个异或的运算,这个库里有
关于MAC运算,PBOC里面用的是Des + final 3Des算法,这个库里也没有现成的,需要自己做
等我研究明白了给你贴源码
------解决方案--------------------
搭了个框架,明天有空再写
C# code
    class pbocSecurity
    {
        DES libDes = new DESCryptoServiceProvider();
        TripleDES lib3Des = new TripleDESCryptoServiceProvider();

        byte[] padding(byte[] inData)
        {
        }

        byte[] desEcb(byte[] inData, byte[] desKey)
        {
        }

        byte[] desCbc(byte[] inData, byte[] desKey, byte[] ICV)
        {
        }

        byte[] tripleDesEcb(byte[] inData, byte[] desKey)
        {
        }

        byte[] tripleDesCbc(byte[] inData, byte[] desKey, byte[] ICV)
        {
        }

        byte[] desMac(byte[] inData, byte[] desKey, int outLen)
        {
        }

        byte[] tripleDesMac(byte[] inData, byte[] desKey, int outLen)
        {
        }
    }