Он генерирует зашифрованные значения, такие как 714FEA9A9A2184769CA49D5133F08580
Тогда они используют «Hex», а не «UUEncode» по умолчанию. Либо "hex", либо "base64" в порядке. Пока вы оба согласны с кодировкой, это не имеет большого значения.
Вы можете использовать RijndaelManaged для расшифровки строк. Однако параметры шифрования по умолчанию для ColdFusion и C# немного различаются. С функцией шифрования:
- «AES» — это сокращение от «AES/ECB/PKCS5Padding».
- Режим "ECB" не использует IV
- Строки ключей всегда кодируются base64.
Примечание. Несмотря на разницу в именах, для поставщика SUN PKCS5Padding
(CF/Java) соответствует PaddingMode.PKCS7
(C#). Как упоминалось в этой теме, "... Поставщик SUN в Java указывает [s] PKCS#5, где следует использовать PKCS#7 - "PKCS5Padding" должен был быть "PKCS7Padding". Это наследие тех времен, когда использовались только 8-байтовые блочные шифры. такие как (тройной) симметричный шифр DES."
Поэтому вам нужно убедиться, что ваши настройки C # настроены так, чтобы они соответствовали. Имея это в виду, просто декодируйте зашифрованный текст ">из hex и ключевой строки из base64. Использование слегка некрасиво пример в API, просто настройте параметры алгоритма так, чтобы они соответствовали параметрам, используемым функцией encrypt():
Шифровать с помощью ColdFusion
<cfscript>
plainText = "Nothing to see";
// 128 bit key base64 encoded
keyInBase64 = "Y25Aju8H2P5DR8mY6B0ezg==";
// "AES" is short for "AES/ECB/PKCS5Padding"
encryptedText = encrypt(plainText, keyInBase64, "AES", "hex");
WriteDump( encryptedText );
// result: 8889EDF02F181158AAD902AB86C63951
</cfscript>
Расшифровать с помощью C#
byte[] bytes = SomeMethodToConvertHexToBytes( encryptedText );
byte[] key = Convert.FromBase64String( keyInBase64 );
string decryptedText = null;
using (RijndaelManaged algorithm = new RijndaelManaged())
{
// initialize settings to match those used by CF
algorithm.Mode = CipherMode.ECB;
algorithm.Padding = PaddingMode.PKCS7;
algorithm.BlockSize = 128;
algorithm.KeySize = 128;
algorithm.Key = key;
ICryptoTransform decryptor = algorithm.CreateDecryptor();
using (MemoryStream msDecrypt = new MemoryStream(bytes))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt))
{
decryptedText = srDecrypt.ReadToEnd();
}
}
}
}
Console.WriteLine("Encrypted String: {0}", encryptedText);
Console.WriteLine("Decrypted String: {0}", decryptedText);
Имейте в виду, что вы можете (и, вероятно, должны) изменять настройки, например использовать более безопасный CBC
режим вместо ECB
. Вам просто нужно согласовать эти изменения с разработчиком CF.
04.10.2014