【问题标题】:How to create a Byte Array Constant in C#?如何在 C# 中创建字节数组常量?
【发布时间】:2015-03-19 01:11:28
【问题描述】:

我需要在我的项目中使用 AES 算法,所以我想为所有要加密的数据设置一个常量密钥。如何在 C# 中创建一个可用作密钥的全局常量字节数组?

【问题讨论】:

  • 你不能。 C# 仅允许在 stringnumerical 类型上使用 constmsdn.microsoft.com/en-us/library/e6w8fe1b.aspx 你应该改用static readonly
  • @Aron 你可以在引用类型上使用const,但是除了null之外你不能分配任何东西。
  • 硬编码常量密钥的想法与加密目的有关。最好使用 PBKDF2 或类似方法从用户输入(如密码)中获取密钥。
  • 您到底遇到了什么困难?编写 C# 程序?创建一个字节数组?您所说的“常量键”是什么意思?你的意思是声明它const 或者你想将它传递给另一个方法并确保该方法不会改变它?
  • 小心反编译你的程序,你的密钥会被任何人暴露

标签: c#


【解决方案1】:

您可以创建的唯一byte[] 常量如下:

const byte[] myBytes = null;

那是因为byte[](或一般的每个数组)是一个引用类型,并且引用类型常量只能有null值分配给它(string类型除外,它可以与字符串一起使用文字)。

常量可以是数字、布尔值、字符串或空引用。

【讨论】:

    【解决方案2】:

    像这样:

    static readonly byte[] key = new byte[] { .. }
    

    或者可以考虑使用字符串,然后使用Bin64将其转换为字节

    请注意,数组是读/写的,因此不是常量。

    编辑

    更好的方法是将常量字符串存储在 Bin64 中,然后即时转换回byte[]

    class Program
    {
        const string key = "6Z8FgpPBeXg=";
        static void Main(string[] args)
        {
            var buffer = Convert.FromBase64String(key);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多