我使用的是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提供的代码中。请你告诉我如何改变它。
答案 0 :(得分:0)
试试这个post。虽然它适用于AES加密,但它可能对您的情况有所帮助。 Bouncy Castle的代码支持Triple DES。
希望有所帮助。
AFAIK,ECB不需要初始化矢量。另外,如果可以,请避免使用ECB,替代方案更安全。