我已经阅读了一些关于这样做的文章,我认为这里有一个我不考虑的变量。
我正在浏览其他人的代码,他们已经实现了三重加密。他们没有密钥和iv作为字符串存储在某处。仅作为字节数组。
我需要在C#之外进行相同的加密/解密调用,所以我试图找出所使用的密钥。
我尝试过的事情:
byte[] key; // this is set
byte[] iv; // this is set
Convert.ToBase64String(key);
Encoding.Default.GetString(key);
Encoding.ASCII.GetString(key);
Encoding.UTF8.GetString(key);
也许其中一个的结果是正确的,但我需要进行另一次转换来编码吗?
如果重要,我只是尝试通过ruby或node.js将这些密钥与openssl一起使用。
对于它的价值,我也尝试在ruby中创建一个字节数组并对它们进行打包,但看起来仍然是错误的结果。
答案 0 :(得分:0)
您是否尝试过使用字节数组的简单十六进制表示法?
string keyHex = BitConverter.ToString(key).Replace("-", "");
string ivHex = BitConverter.ToString(iv).Replace("-", "");
(您可能还需要小写字符串和/或用0x
作为前缀,具体取决于其他系统的繁琐程度。)
答案 1 :(得分:0)
好的,我还必须在Ruby代码中重现.NET加密例程。几个小时后,我的头撞到墙上,这就是我的想法。忘记Base64,将此代码用于C#部分:
BitConverter.ToString(key).Replace(“ - ”,“”)
存储结果。现在在Ruby中定义这个函数:
def self.hex_to_bin(s) s.scan(/../).map { |x| x.hex.chr }.join end
并使用C#部分的输出调用它,它会将hexa字符串转换为bin字符串。对我来说,这个交易破坏者是在Ruby方面进行这种转换。它适用于iv和键。