2

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

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

4

2 回答 2

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# 部分的输出调用它,它将十六进制字符串转换为 bin 字符串。对我来说,最重要的是在 Ruby 方面进行这种转换。它适用于 iv 和密钥。

于 2013-08-29T23:54:00.587 回答
0

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

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

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

于 2013-06-23T01:03:44.017 回答