gpt4 book ai didi

c# - 在 Coldfusion 中加密并在 C# 中解密

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:13 24 4
gpt4 key购买 nike

这里是coldfusion中用来加密的代码

<cfset strBase64Value = encrypt(strValue,24 character key,AES) />

它正在生成像 714FEA9A9A2184769CA49D5133F08580 这样的加密值,考虑到它只有大写字母和数字,这对我来说似乎很奇怪。

我应该使用什么 C# 库来正确解密它?

同时查看 this information ,似乎默认使用UUEncode算法进行编码。

我应该要求加密器使用 Base64 作为编码参数吗?

最佳答案

It is generating encrypted values like 714FEA9A9A2184769CA49D5133F08580

那么他们使用的是“Hex”,而不是默认的“UUEncode”。 “hex”或“base64”都可以。只要你们都同意编码,就没有关系。

您可以使用 RijndaelManaged解密字符串。但是,ColdFusion 和 C# 的默认加密设置略有不同。使用加密功能:

  • “AES”是“AES/ECB/PKCS5Padding”的缩写
  • “ECB”模式不使用 IV
  • key 字符串始终采用 base64 编码

注意:尽管名称不同,对于 SUN 提供程序,PKCS5Padding (CF/Java) 对应于 PaddingMode.PKCS7 (C#) . As mentioned in this thread“...Java 中的 SUN 提供程序指示 [s] PKCS#5,其中 PKCS#7 应该被使用——“PKCS5Padding”应该是“PKCS7Padding”。这是从只有 8 字节 block 的时候遗留下来的可以使用(三重)DES 对称密码等密码。

因此,您需要确保调整 C# 设置以匹配。考虑到这一点,只需解码加密文本 from hex和来自 base64 的 key 字符串。使用 slightly ugly example in the 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 mode而不是 ECB。您只需要与 CF 开发人员协调这些更改。

关于c# - 在 Coldfusion 中加密并在 C# 中解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26186665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com