[英]Encrypting a file into Base64 format using AES/Rijndael
在DevGlan中, 網址為https://www.devglan.com/online-tools/aes-encryption-decryption ,該工具具有一個在線工具,您可以在其中上傳文件,然后使用AES加密將其加密為Base64格式,還可以選擇密碼模式,秘密密鑰和初始化向量。 我想在我的C#Web應用程序中實現相同的目的。 這是我的代碼:
FileUpload3.SaveAs(Server.MapPath(FileUpload3.FileName));
string inputFile = Server.MapPath(FileUpload3.FileName);
byte[] bytesToEncrypt = File.ReadAllBytes(inputFile);
byte[] encryptedBytes = EncryptAESfile(bytesToEncrypt, CipherMode.CBC, keyArray, IV);
string encryptedFileBase64 = Convert.ToBase64String(encryptedBytes);
string encryptedFileHex = BitConverter.ToString(encryptedBytes).Replace("-", "");
public byte[] EncryptAESfile(byte[] data, CipherMode mode, byte[] key, byte[] iv)
{
byte[] encryptedData = null;
if (data == null)
throw new ArgumentNullException("data");
if (data == key)
throw new ArgumentNullException("key");
if (data == iv)
throw new ArgumentNullException("iv");
using (RijndaelManaged aesAlg = new RijndaelManaged())
{
aesAlg.Key = key;
aesAlg.IV = iv;
aesAlg.Mode = mode;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
encryptedData = encryptor.TransformFinalBlock(data, 0, data.Length);
}
return encryptedData;
}
該代碼不返回該文件的Base64編碼字符串,如可變encryptedFileBase64
,但在參考DevGlan不正確的。 我的代碼僅返回長度為24的Base64字符串,而DevGlan返回近100,000個字符的字符串。 另外,當我測試以查看是否正在讀取字節時,以下代碼返回0,因此問題可能出在我的前幾行:
lblBytes.Text += "Bytes read: " + bytesToEncrypt.Length;
我也看到過許多加密文件的示例(無論是使用AES還是其他對稱加密算法),但沒有返回Base64字符串的文件。 在關閉CryptoStream之前,大多數以這樣的行結尾:
byte[] bytearrayinput = new byte[fsInput.Length];
fsInput.Read(bytearrayinput, 0, bytearrayinput.Length); // The input FileStream
cryptostream.Write(bytearrayinput, 0, bytearrayinput.Length);
參考: 使用AES加密任何文件
有沒有一種方法可以讀取CryptoStream的字節數組,然后將其轉換為Base64,因為我不認為bytearrayinput
可以存儲正確的信息。 幫助將不勝感激。 謝謝!
第一:如何創建密鑰? 您是否仔細檢查過鹽是否相同?
另外我還沒有檢查,但是這段代碼應該可以工作:
AesManaged cipher = new AesManaged();
cipher.Mode = MODE;
ICryptoTransform encryptor = cipher.CreateEncryptor(KEY, IV);
MemoryStream to = new MemoryStream();
CryptoStream writer = new CryptoStream(to, encryptor, CryptoStreamMode.Write);
writer.Write(input, 0, input.Length);
writer.FlushFinalBlock();
byte[] encrypted = to.ToArray();
return Convert.ToBase64String(encrypted);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.