C# 使用Blowfish与Coldfusion和.NET/BouncyCastle对数据进行加密和解密

C# 使用Blowfish与Coldfusion和.NET/BouncyCastle对数据进行加密和解密,c#,encryption,coldfusion,bouncycastle,blowfish,C#,Encryption,Coldfusion,Bouncycastle,Blowfish,我正在尝试使用BouncyCastle for ASP.NET MVC模拟coldfusion Blowfish/Hex加密。我能够使用此链接中列出的步骤成功解密CF中加密的字符串: 除了在7个字符字符串的末尾添加一个\0之外,它的效果非常好 我并没有试图使用Blowfish/CBC/pkcs5p,只是使用Blowfish/Hex。我无法使反向(加密)工作。下面是我到目前为止的代码 我尝试过使用手动填充=,以及忽略。但是,即使使用附加字符,它仍然不会同步 解密(有效): 加密(不工作): “不起

我正在尝试使用BouncyCastle for ASP.NET MVC模拟coldfusion Blowfish/Hex加密。我能够使用此链接中列出的步骤成功解密CF中加密的字符串:

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

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

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

解密(有效):

加密(不工作):

“不起作用”的意思是-它返回一个加密字符串,该字符串与CF加密的字符串完全不同。除此之外,当使用上述方法解密时,返回的字符串与最初输入的内容不匹配(使用.NET/BouncyCastle加密)

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

byte[] inB = Encoding.UTF8.GetBytes(stringToEncrypt);
而不是:

byte[] inB = Hex.Encode(Convert.FromBase64String(stringToEncrypt));
其他安全提示:

  • 我不是加密专家,但是,您应该使用CBC模式,每次使用不同的IV,以提高安全性。(目前的代码使用ECB,这不太安全)

  • 对于将来阅读此线程的任何人来说,显然关键值“TEST”只是为了说明不要使用任意值作为键,因为这会削弱安全性。始终使用标准加密库生成的强密钥。例如,在CF中使用函数


  • 你能详细解释一下“不起作用”吗?当然。它返回一个加密字符串,该字符串与CF加密的字符串完全不同。除此之外,当使用上述方法解密时,返回的字符串与最初输入的内容不匹配(使用.NET/BouncyCastle加密)。太好了,非常感谢!是的,“测试”只是为了说明。@MeanDean73-是的,我想你知道:-)但是很多人只是在网上复制和粘贴示例,可能没有意识到使用任意字符串作为加密密钥是。。。好。。。坏-;)
    byte[] inB = Encoding.UTF8.GetBytes(stringToEncrypt);
    
    byte[] inB = Hex.Encode(Convert.FromBase64String(stringToEncrypt));