2013-06-23 149 views
2

我读过一些关于这样做的文章,我认为这里有一个我不考虑的变量。C#字节数组到字符串

我正在通过别人的代码,他们已经实现了三重DES加密。他们没有钥匙,并将其存储在某处作为字符串。只作为字节数组。

我需要在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

简单编码不会进行加密或解密。 – Paparazzi

+0

我在这里没有加密或解密。只是试图获取密钥的字符串 – JohnAgan

回答

0

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

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

(您可能还需要为小写的字符串和/或0x他们的前缀,这取决于其他系统是如何挑剔的。)

0

好吧,我也不得不重现.NET加密程序在Ruby代码中。几个小时后,我的头撞墙,这是我的想法。忘掉Base64的,使用此代码为C#部分:

BitConverter.ToString(键).Replace( “ - ”, “”)

存储结果。现在,在Ruby中定义此函数:

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

,并使用从C#部分输出调用它,它会在六字符串转换成二进制串。对我来说,这个决定因素就是在Ruby方面进行这种转换。它适用于iv和key。