C#字节数组为字符串

时间:2013-06-23 00:02:35

标签: c# .net encryption openssl tripledes

我已经阅读了一些关于这样做的文章,我认为这里有一个我不考虑的变量。

我正在浏览其他人的代码,他们已经实现了三重加密。他们没有密钥和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中创建一个字节数组并对它们进行打包,但看起来仍然是错误的结果。

2 个答案:

答案 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和键。