C#字节数组到字符串

本文关键字:字符串 数组 字节数 字节 | 更新日期: 2023-09-27 18:19:43

我读了几篇关于这方面的文章,我认为这里有一个变量我没有考虑。

我正在研究其他人的代码,他们在那里实现了三重des加密。他们没有密钥,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中创建一个字节数组并对其进行打包,但结果似乎仍然是错误的。

C#字节数组到字符串

您是否尝试过使用字节数组的直接十六进制表示?

string keyHex = BitConverter.ToString(key).Replace("-", "");
string ivHex = BitConverter.ToString(iv).Replace("-", "");

(您可能还需要将字符串小写和/或在其前面加上0x,这取决于其他系统的挑剔程度。)

好的,我还必须在Ruby代码中重现一个.NET加密例程。几个小时后,我的头撞到了墙上,下面是我的想法。忘记Base64,将此代码用于C#部分:

BitConverter.ToString(键).Replace("-",")

存储结果。现在在Ruby中定义这个函数:

def self.hex_to_bin(s) 
  s.scan(/../).map { |x| x.hex.chr }.join
end

用C#部分的输出调用它,它将把hexa字符串转换为bin字符串。对我来说,破坏交易的因素是在Ruby端进行转换。它对iv和key都有效。