use*_*632 0 c# encryption bytearray securestring
如何将 Aes.Key 转换为 secureString ?我正在做一个字节 [] -> 字符串 -> 安全字符串。我正面临一个不同的问题。将字节 [] 中的密钥转换为字符串并返回到字节 [] 时,我得到了不同的字节 []。代码有什么问题?
Aes aes = Aes.Create();
aes.GenerateIV();
aes.GenerateKey();
byte[] byteKey1 = aes.Key;
string sKey = Encoding.UniCode.GetString(byteKey);
byte[] byteKey2= Encoding.UniCode.GetBytes(sKey);
Run Code Online (Sandbox Code Playgroud)
“byteKey1”和“byteKey2”有时是不同的。如果我使用 Encoding.Default,它们是相等的,但是当不同的机器具有不同的默认编码时会出现问题。
如何将 byte[] 中的 Key 转换为 SecureString 并返回到 byte[] ?
谢谢。
切勿对二进制数据(如加密密钥或密文)使用文本编码(例如,Unicode 或 ASCII)。编码用于文本表示,并且实现可以在编码允许的情况下更改二进制内容。
相反,使用Convert.ToBase64String和Convert.FromBase64String将二进制文本转换为可以以文本格式编码的形式。
下面的代码将说明byteKey2并且byteKey将是相同的。
string sKey = Convert.ToBase64String(byteKey);
byte[] byteKey2= Convert.FromBase64String(sKey);
bool equal = byteKey.SequenceEqual(byteKey2); // will be true
Run Code Online (Sandbox Code Playgroud)