1. aes 加密简介
aes(advanced encryption standard,高级加密标准)是一种对称加密算法,意味着加密和解密使用相同的密钥。aes 支持不同的密钥长度,如 128 位、192 位和 256 位。为了简便起见,本文将使用 128 位密钥(即 16 字节)进行加密。
2. c# 中的 aes 加密与解密
在 c# 中,system.security.cryptography 命名空间提供了内置的 aes 加密支持。通过 aes 类,我们可以轻松实现加密和解密操作。以下是一个完整的示例代码,展示了如何在 c# 中进行 aes 加密和解密。
class program { private static string key = "1234567890123456"; // 16字节密钥,aes-128 private static string iv = "1234567890123456"; // 16字节iv(初始化向量) // 加密函数 public static string encrypt(string plaintext) { using (aes aesalg = aes.create()) // 创建aes加密实例 { aesalg.key = encoding.utf8.getbytes(key); // 设置密钥 aesalg.iv = encoding.utf8.getbytes(iv); // 设置初始化向量 icryptotransform encryptor = aesalg.createencryptor(aesalg.key, aesalg.iv); // 创建加密器 using (memorystream msencrypt = new memorystream()) // 用于存储加密后的数据 { using (cryptostream csencrypt = new cryptostream(msencrypt, encryptor, cryptostreammode.write)) // 创建加密数据流 { using (streamwriter swencrypt = new streamwriter(csencrypt)) // 写入加密流 { swencrypt.write(plaintext); // 写入明文数据 } } // 返回加密后的数据,转换为base64字符串 return convert.tobase64string(msencrypt.toarray()); } } } // 解密函数 public static string decrypt(string ciphertext) { using (aes aesalg = aes.create()) // 创建aes实例 { aesalg.key = encoding.utf8.getbytes(key); // 设置密钥 aesalg.iv = encoding.utf8.getbytes(iv); // 设置初始化向量 icryptotransform decryptor = aesalg.createdecryptor(aesalg.key, aesalg.iv); // 创建解密器 using (memorystream msdecrypt = new memorystream(convert.frombase64string(ciphertext))) // 将base64字符串转换为字节数组并读取 { using (cryptostream csdecrypt = new cryptostream(msdecrypt, decryptor, cryptostreammode.read)) // 创建解密数据流 { using (streamreader srdecrypt = new streamreader(csdecrypt)) // 从解密流中读取数据 { return srdecrypt.readtoend(); // 返回解密后的明文 } } } } } static void main(string[] args) { string originaltext = "hello, aes encryption!"; // 原始明文 console.writeline("original text: " + originaltext); // 输出原始文本 string encryptedtext = encrypt(originaltext); // 加密 console.writeline("encrypted text: " + encryptedtext); // 输出加密后的文本 string decryptedtext = decrypt(encryptedtext); // 解密 console.writeline("decrypted text: " + decryptedtext); // 输出解密后的文本 console.readkey(); } }
3. 代码详解
密钥和初始化向量(iv):
- 在 aes 加密中,密钥长度和初始化向量(iv)的长度非常重要。这里使用了 16 字节的密钥(128 位),也使用了 16 字节的 iv。这是 aes-128 加密所需的标准设置。
加密过程:
- 使用
aes.create()
创建 aes 实例。 - 设置密钥 (
key
) 和初始化向量 (iv
)。 - 使用
createencryptor
创建加密器,接着通过cryptostream
和memorystream
实现数据流的加密。 - 最终将加密后的字节流转换为 base64 字符串,方便以文本形式存储或传输。
- 使用
解密过程:
- 解密过程与加密过程相反。我们使用相同的密钥和 iv,通过
createdecryptor
解密数据流,最终恢复原始文本。
- 解密过程与加密过程相反。我们使用相同的密钥和 iv,通过
4. 示例输出
假设我们加密并解密一段文本 "hello, aes encryption!"
,输出将如下所示:
original text: hello, aes encryption! encrypted text: p5/fgfh/susyogyog7wdia== decrypted text: hello, aes encryption!
可以看到,原始文本被成功加密并转换为一个 base64 编码的字符串,然后又解密回原始的明文。
5. 安全注意事项
在实际应用中,密钥和初始化向量的生成应该更为复杂且具有随机性,以提高加密的安全性。避免使用固定的密钥和 iv,尤其是在生产环境中。
例如,可以使用 rngcryptoserviceprovider
来生成一个随机的密钥和 iv,而不是手动指定它们。这样可以增强加密的强度,确保每次加密都具有独一无二的安全性。
6. 结语
通过上述示例,我们学习了如何使用 c# 实现 aes 加密和解密。aes 是一种高效且安全的对称加密算法,广泛应用于各类数据保护和信息安全场景。掌握它的实现,能帮助我们在开发中保护敏感数据,确保应用程序的安全性。
到此这篇关于使用c#实现aes加密与解密的示例的文章就介绍到这了,更多相关c# aes加密与解密内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论