Tag: tripledes

为什么TripleDES.Create()。Key不是此算法的有效大小?

在我需要使用不同密钥解密文本的情况下,我还需要在后面的代码中生成有效密钥。 我正在使用此行生成密钥。 var key = Encoding.UTF8.GetString(TripleDES.Create().Key); 但不能在此方法中使用该键。 它说“指定密钥不是此算法的有效大小” 我该如何解决这种情况? public class CryptoHelper { public string Encrypt(string toEncrypt, string key) { var toEncryptArray = Encoding.UTF8.GetBytes(toEncrypt); var keyArray = Encoding.UTF8.GetBytes(key); var tdes = new TripleDESCryptoServiceProvider { Key = keyArray, Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7 }; var cTransform = tdes.CreateEncryptor(); var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); tdes.Clear(); […]

CFB模式下的TripleDES,C#和Crypto ++有所不同

这是我的问题:我有一个C ++中的遗留代码(使用crypto ++ v5.6.1),我在C#中开发了一个新代码(使用System.Security.Cryptography的.NET 3.5)。 我无法更改 C ++代码,但我需要能够解密先前加密的数据,以前的应用程序必须能够解密我将使用新的C#代码加密的数据。 在两种情况下使用的算法都是具有CFB密码模式的TripleDES,但最后,加密数据不相同,字节数和第一个字节相同,但除此之外所有其他字节都不同。 在C ++代码中手动完成填充(添加零)。 所以我将PaddingValue设置为PaddingMode.Zeros。 (我也尝试在C#代码中手动添加零,它没有改变任何东西)。 我尝试使用不同的System.Text.Encoding但结果是相同的(实际上测试的字符是“纯”ASCII(即:在0和126之间))。 在C ++代码中,MandatoryBlockSize()的值是8,所以我也将FeedbackSize设置为8。 但是,如果我理解它写,它实际上是我的IV的大小,不是吗? 密钥大小为24个字节(3个不同的密钥),IV为8个字节长。 它们在2个代码中都是相同的。 如果我在两种情况下都使用CBC模式,结果是相同的(但是,正如我所说,我无法更改遗留代码…),OFB和CTS模式抛出exception(一个不可用,另一个不兼容)在我的.NET应用程序上,所以我无法比较结果。 我尝试使用Mono,.Net版本3.5和4.0,或使用visual,与.Net 3.5或4.0,4加密结果相同,但它与原始结果不同。 现在我真的不知道要测试什么…我宁愿不在C ++ / CLI项目中包装Crypto ++来使用它而不是System.Security.Cryptography。 有人有建议或者能说出我做错了什么吗? 这是C ++代码: void *CryptData(BYTE *bDataIn, LONG lIn, LONG *lOut, byte* key, byte* iv) { byte *bIn; byte *bOut; LONG l2,lb; CFB_FIPS_Mode::Encryption encryption_DES_EDE3_CFB; encryption_DES_EDE3_CFB.SetKeyWithIV(key, sizeof(key), iv, sizeof(iv)); lb […]