存储并检索文件的AES密钥



如何将AES密钥存储到文件中,然后检索它?

我试着把它作为字符串保存到一个文本文件中,然后取回它并将其转换为字节,但解密永远不起作用…

using (var provider = new AesCryptoServiceProvider())
{
var cryptoTransform = provider.CreateEncryptor();

Key = provider.Key;
IV = provider.IV;
string key_string = Encoding.ASCII.GetString(Key);
File.WriteAllText(@"C:DocumentsAESKey.txt", key_string);
string string_key = System.IO.File.ReadAllText(@"C:DocumentsAESKey.txt");
testKey_bytes = Encoding.ASCII.GetBytes(string_key); ;

如前所述,您可以使用File.WriteAllBytes((保存并使用File.ReadAllBytes(读回。

但您也必须存储IV(至少在CBC模式下(。这可以通过BinaryReader和BinaryWriter来完成。请放心,您的钥匙将存放在安全的地方:

private static void SaveIVAndKey(AesCryptoServiceProvider provider)
{
using (FileStream fileStream = new FileStream("YourKeyFile.txt", FileMode.OpenOrCreate, FileAccess.Write))
{
using (BinaryWriter binaryWriter = new BinaryWriter(fileStream))
{
binaryWriter.Write(provider.IV.Length);
binaryWriter.Write(provider.IV);
binaryWriter.Write(provider.Key.Length);
binaryWriter.Write(provider.Key);
}
}
}

要将其读回,您可以使用以下方法:

private static void LoadIVAndKey(AesCryptoServiceProvider provider)
{
using (FileStream fileStream = new FileStream("YourKeyFile.txt", FileMode.Open, FileAccess.Read))
{
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
provider.IV = binaryReader.ReadBytes(binaryReader.ReadInt32());
provider.Key = binaryReader.ReadBytes(binaryReader.ReadInt32());
}
}
}

我已经设法解决了:(

File.WriteAllBytes(@"C:DocumentsAESKey.txt", Key.ToArray());
testKey_bytes = File.ReadAllBytes(@"C:DocumentsAESKey.txt");

最新更新