如何在C#中创建字节数组常量?

4

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


3
你不能这样做。C#只允许在“字符串”和“数字”类型上使用“const”。https://msdn.microsoft.com/en-us/library/e6w8fe1b.aspx 你应该使用“static readonly”代替。 - Aron
@Aron,你可以在引用类型上使用const,但是你只能将null赋值给它,不能赋其他任何值。 - MarcinJuraszek
1
硬编码常量密钥的想法对于加密目的令人担忧。最好从用户输入(如密码)中派生密钥,使用PBKDF2或类似方法。 - vcsjones
1
注意你的程序可能会被反编译,你的密钥将会被任何人暴露。 - Eric
可能是声明一个长的常量字节数组的重复问题。 - Eagle-Eye
显示剩余3条评论
2个回答

5
你可以创建的唯一 byte[] 常量是以下内容:
const byte[] myBytes = null;

那是因为byte[](或者说所有的数组)都是引用类型,而引用类型的常量只能被赋值为null(除了string类型,可以使用字符字面值)。

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


5
像这样:
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);

    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接