gpt4 book ai didi

c# - 使用带有 Coldfusion 和 .NET/BouncyCaSTLe 的 Blowfish 加密和解密数据

转载 作者:太空宇宙 更新时间:2023-11-03 12:07:12 26 4
gpt4 key购买 nike

我正在尝试使用 BouncyCaSTLe 为 ASP.NET MVC 模拟 coldfusion Blowfish/Hex 加密。我能够使用此链接中列出的步骤成功解密在 CF 中加密的字符串:Encrypt and Decrypt data using Blowfish/CBC/PKCS5Padding

除了在 7 个字符串的末尾添加一个\0 之外,它的效果很好。

我没有尝试使用 Blowfish/CBC/PKCS5Padding,只是使用 Blowfish/Hex。我无法进行反向(加密)工作。下面是我到目前为止的代码

我试过使用 = 的手动填充,以及忽略。但是,即使使用附加字符,它仍然不同步。

解密(有效):

string keyString = "TEST";
BlowfishEngine engine = new BlowfishEngine();
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(engine);
cipher.Init(false, new KeyParameter(Convert.FromBase64String(keyString)));
byte[] out1 = Hex.Decode(hexstring);
byte[] out2 = new byte[cipher.GetOutputSize(out1.Length)];
int len2 = cipher.ProcessBytes(out1, 0, out1.Length, out2, 0);
cipher.DoFinal(out2, len2);
string myval = Encoding.UTF8.GetString(out2);

加密(不起作用):

string keyString = "TEST";
string stringToEncrypt = "0123456";
stringToEncrypt = stringToEncrypt + "=";
BlowfishEngine engine2 = new BlowfishEngine();
PaddedBufferedBlockCipher cipher2 = new PaddedBufferedBlockCipher(engine2);
cipher2.Init(true, new KeyParameter(Convert.FromBase64String(keyString)));
byte[] inB = Hex.Encode(Convert.FromBase64String(stringToEncrypt));
byte[] outB = new byte[cipher2.GetOutputSize(inB.Length)];
int len1 = cipher2.ProcessBytes(inB, 0, inB.Length, outB, 0);
cipher2.DoFinal(outB, len1);
var myval2 = BitConverter.ToString(outB).Replace("-", "");

“不起作用”的意思是 - 它返回一个加密的字符串,该字符串绝不会反射(reflect)由 CF 加密的字符串。最重要的是,返回的字符串在使用上述方法解密时与最初输入的内容不匹配(使用 .NET/BouncyCaSTLe 加密)

最佳答案

C# 代码将输入解码为 base64,而实际上它只是纯文本。所以你加密了错误的值。这就是结果与来自 CF 的加密字符串不匹配的原因。由于 CF 始终使用 UTF8,因此使用:

byte[] inB = Encoding.UTF8.GetBytes(stringToEncrypt);

代替:

byte[] inB = Hex.Encode(Convert.FromBase64String(stringToEncrypt));

其他安全提示:

  1. 我不是加密方面的专家,但是 from what I've read您应该使用 CBC 模式,每次使用不同的 IV,以获得更好的安全性。 (当前代码使用 ECB,安全性较低)。

  2. 对于以后阅读此主题的任何人来说,键值“TEST”显然只是为了说明。 不要使用任意值作为键,因为它会削弱安全性。始终使用由标准加密库生成的强 key 。例如,在 CF 中使用 GenerateSecretKey功能。

关于c# - 使用带有 Coldfusion 和 .NET/BouncyCaSTLe 的 Blowfish 加密和解密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352932/

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