【问题标题】:C# byte array to stringC#字节数组到字符串
【发布时间】:2013-06-19 20:10:45
【问题描述】:

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

我正在查看其他人的代码,他们在其中实施了三重加密。他们没有密钥,并且 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# .net encryption openssl tripledes


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    好的,我还必须在 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 和密钥。

    【讨论】:

      猜你喜欢
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2022-01-13
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多