WP7中的TripleDESCryptoServiceProvider

时间:2012-02-09 10:39:50

标签: windows-phone-7

我使用的是TripleDESCryptoServiceProvider类加密字符串Here

我在桌面代码中获得了相同的加密字符串(不是WP7简单的c#),其初始化向量= {0,0,0,0,0,0,0,0} 但如果我将IV更改为{64,64,64,64,64,64,64,64},我将获得不同的加密字符串。 从字节字符串转换我使用base64编码。 这是我的代码: 注意:如果我在桌面上使用WP7加密字符串tro解密,则前8个字符未正确解密,其余字符是正确的。意思是“嗨,我的朋友!我对TripleDES很安全:)”);只有“结束!我对TripleDES安全:)”这非常正确。开始时有些垃圾。

 private static byte[] sharedkey ={
            0x01, 0x02, 0x03, 0x05, 0x07, 0x0B, 0x0D, 0x11, 
            0x12, 0x11, 0x0D, 0x0B, 0x07, 0x02, 0x04, 0x08, 
            0x01, 0x02, 0x03, 0x05, 0x07, 0x0B, 0x0D, 0x11
          };
    private static byte[] sharedvector = new byte[] { 64, 64, 64, 64, 64, 64, 64, 64 };

var toEncrypt = Encoding.UTF8.GetBytes(“嗨,我的朋友!我对TripleDES很安全:)”);

        TripleDESCryptoServiceProvider tdesAlgorithm = new TripleDESCryptoServiceProvider();

        // Create the encryptor
        ICryptoTransform encryptor = tdesAlgorithm.CreateEncryptor(sharedkey, sharedvector);
        var cryptedBytes = encryptor.TransformFinalBlock(toEncrypt, 0, toEncrypt.Length);

        // Create the decryptor
        ICryptoTransform decryptor = tdesAlgorithm.CreateDecryptor(sharedkey, sharedvector);
        var decryptedBytes = decryptor.TransformFinalBlock(cryptedBytes, 0, cryptedBytes.Length);

        var uncryptedString = Encoding.UTF8.GetString(decryptedBytes, 0, decryptedBytes.Length);

编辑:对于ECB来说,IV被忽略了。在Nocolus提供的代码中。请你告诉我如何改变它。

1 个答案:

答案 0 :(得分:0)

试试这个post。虽然它适用于AES加密,但它可能对您的情况有所帮助。 Bouncy Castle的代码支持Triple DES。

希望有所帮助。

AFAIK,ECB不需要初始化矢量。另外,如果可以,请避免使用ECB,替代方案更安全。