首页 > 其他分享 >AES加密的基本常识和封装类

AES加密的基本常识和封装类

时间:2023-07-26 21:47:33浏览次数:30  
标签:AES 加密 密钥 using 基本常识 封装 byte aesAlg

AES加密的基本常识和封装类

AES(Advanced Encryption Standard)是一种对称密钥加密算法,被广泛用于保护敏感数据的安全性。它是一种块加密算法,意味着它将明文数据分成固定大小的块,并使用相同的密钥对每个块进行独立加密。AES算法支持不同的密钥长度,包括128位、192位和256位密钥。

一、 AES加密特点

  1. 对称加密: AES是对称加密算法,同一个密钥用于加密和解密数据。发送方和接收方需要事先共享密钥。
  2. 快速高效: AES是一种高效的加密算法,适合在各种硬件和软件平台上使用。
  3. 安全性: 当使用128位、192位或256位密钥时,AES被认为是安全的,并且目前没有已知的有效攻击方法来破解有效密钥长度的AES加密。
  4. 块加密: AES对数据进行块加密,每个块的大小固定为128位(16字节)。

二、AES的应用

  1. 数据传输加密: 在网络通信和数据传输过程中,使用AES加密可以确保数据在传输过程中不被未授权的人员读取和篡改。例如,网站使用HTTPS协议来通过TLS/SSL加密传输数据,保护用户在网页上输入的敏感信息,如登录凭据、信用卡信息等。
  2. 数据库加密: 对于存储在数据库中的敏感数据,如用户密码、个人身份信息等,可以使用AES加密来增加数据的安全性。即使数据库被非法访问,由于数据已被加密,黑客也很难获得实际的敏感信息。
  3. 文件加密: 对于存储在本地计算机或云存储中的重要文件,使用AES加密可以确保只有授权的用户才能访问这些文件。
  4. 数字版权保护: 在数字内容传输和存储中,例如音频、视频和电子书等,使用AES加密可以防止未经授权的复制和传播。
  5. 身份认证: 在身份认证过程中,可以使用AES加密来保护用户的身份凭据和令牌,以防止恶意用户截获和篡改认证信息。
  6. 加密电子邮件: 对于敏感的电子邮件通信,可以使用AES加密来确保邮件内容在传输和存储过程中的安全性。
  7. 加密即时通讯: 对于即时通讯应用,如聊天应用或社交媒体,使用AES加密可以确保消息内容只有发送者和接收者能够解密和阅读。
  8. 加密移动应用: 对于移动应用中的敏感数据,如用户设置、个人信息和支付信息,使用AES加密可以提高应用的数据安全性。

总的来说,AES加密算法在需要保护数据隐私和确保数据安全性的场景中都可以发挥重要作用。然而,需要注意的是,加密只是安全性的一部分,还需要综合其他安全措施,如身份验证、授权管理和防止代码注入等来构建全面的安全方案。

三、AES随机数生成器

在AES算法中,生成安全的随机数是非常重要的,因为密钥的随机性直接影响到加密的安全性。在C#中,可以使用RNGCryptoServiceProvider类来生成安全的随机数。这个类使用CSP (Cryptographic Service Provider) 提供的强大随机数生成器来生成高质量的随机数。

using System;
using System.Security.Cryptography;

class Program
{
    static void Main()
    {
        // 创建一个RNGCryptoServiceProvider实例
        using (var rngCsp = new RNGCryptoServiceProvider())
        {
            // 定义密钥长度(以字节为单位),AES算法支持128、192和256位密钥
            int keySizeInBytes = 32; // 256位密钥,对应32字节

            // 用于存储生成的随机数的字节数组
            byte[] randomBytes = new byte[keySizeInBytes];

            // 生成随机数
            rngCsp.GetBytes(randomBytes);

            // 将随机数转换成Base64字符串,以便存储和传输
            string base64Key = Convert.ToBase64String(randomBytes);

            // 输出生成的密钥
            Console.WriteLine("随机生成的AES密钥:");
            Console.WriteLine(base64Key);
        }
    }
}

这段代码通过RNGCryptoServiceProvider类生成一个256位(32字节)的AES密钥,并将生成的随机字节转换成Base64字符串。生成的密钥是高质量的、安全的随机数,适合在AES加密中使用。

值得注意的是,在使用生成的随机数作为AES密钥时,务必确保密钥的保密性,不要明文存储密钥或者通过不安全的方式传输密钥。一般来说,可以使用其他手段(例如非对称加密)来保护密钥的传输和存储。

四、AES加密封装类

using System;
using System.Security.Cryptography;
using System.Text;

public class AesEncryptionExample
{
    public static byte[] Encrypt(string plainText, byte[] key, byte[] iv)
    {
        byte[] encrypted;
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = key;
            aesAlg.IV = 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);
                    }
                    encrypted = msEncrypt.ToArray();
                }
            }
        }
        return encrypted;
    }

    public static string Decrypt(byte[] cipherText, byte[] key, byte[] iv)
    {
        string plaintext = null;
        using (Aes aesAlg = Aes.Create())
        {
            aesAlg.Key = key;
            aesAlg.IV = iv;

            ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);

            using (MemoryStream msDecrypt = new MemoryStream(cipherText))
            {
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                {
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                    {
                        plaintext = srDecrypt.ReadToEnd();
                    }
                }
            }
        }
        return plaintext;
    }

    public static void Main()
    {
        string originalText = "Hello, AES!";
        byte[] key = new byte[32]; // 256-bit key
        byte[] iv = new byte[16];  // 128-bit IV

        // Generate random key and IV
        using (var rngCryptoServiceProvider = new RNGCryptoServiceProvider())
        {
            rngCryptoServiceProvider.GetBytes(key);
            rngCryptoServiceProvider.GetBytes(iv);
        }

        byte[] encryptedBytes = Encrypt(originalText, key, iv);
        string encryptedText = Convert.ToBase64String(encryptedBytes);
        Console.WriteLine($"Encrypted: {encryptedText}");

        string decryptedText = Decrypt(encryptedBytes, key, iv);
        Console.WriteLine($"Decrypted: {decryptedText}");
    }
}

在这个示例中,我们使用AES算法来加密和解密数据。需要注意的是,加密和解密的过程需要使用相同的密钥和初始化向量(IV)。在示例中,我们使用了256位的密钥和128位的IV,可以根据需要更改这些值。同时,为了保证密钥和IV的安全性,通常需要使用安全的随机数生成器来生成它们。

标签:AES,加密,密钥,using,基本常识,封装,byte,aesAlg
From: https://www.cnblogs.com/chenhanhans/p/17583618.html

相关文章

  • DES加密的基本常识和封装类
    DES加密的基本常识和封装类DES(DataEncryptionStandard)是一种对称加密算法,它是在1977年由IBM所提出,并在1981年被美国国家标准局(NIST)确定为数据加密标准。DES使用相同的密钥对数据进行加密和解密,因此属于对称加密算法。虽然DES在过去被广泛使用,但由于其较短的密钥长度(56位)导致了......
  • RSA加密的基本常识和封装类
    RSA加密的基本常识和封装类RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密、数字签名和密钥交换等领域。在RSA加密封装中,主要涉及生成密钥对、加密和解密的过程。一、RSA加密封装的过程1.生成密钥对:RSA算法使用一对密钥,包括公钥和私钥。公钥用于加密数据,......
  • AI面试官:MD5、DES、RSA、AES加密
    AI面试官:MD5、DES、RSA、AES加密目录AI面试官:MD5、DES、RSA、AES加密1.什么是MD5加密?它在实际应用中有哪些场景?2.DES加密是什么?它在现实中的应用场景有哪些?3.问题:RSA加密是什么?它在实际应用中的场景有哪些?4.AES加密是什么?它在现实生活中有哪些应用场景?5.请比较MD5、DES、RSA......
  • c++学习:封装、继承、多态
    c++是面向对象的编程语言,相对于c具有封装、继承、多态的特点。封装定义:封装就是将对象的属性和行为封装起来,形成一个有机的整体,其载体就是类。类通常对客户隐藏其实现细节,这就是封装的思想,就比如我们使用一个库函数时,我们只需要知道它的作用就可以了,没必要去了解它的内部工......
  • mybaties --- insert的底层封装代码
    //提交,当前的对象到数据库//.save()方法是IService接口提供的,而EmployeeService接口继承了IService接口employeeService.save(employee);/*defaultbooleansave(Tentity){returnSqlHelper.retBool(this.getBaseMapper().insert(entity));}这段代码是一个通用的保存方法......
  • Asp.Net 使用Log4Net (封装帮助类)
    Asp.Net使用Log4Net(封装帮助类)1.创建Log4Net帮助类首先,在你的项目中创建一个Log4Net帮助类,用于封装Log4Net的配置和日志记录逻辑。usinglog4net;usinglog4net.Config;publicclassLogHelper{privatestaticreadonlyILoglog=LogManager.GetLogger(typeof(......
  • MURF20100CTR-ASEMI快恢复对管封装、尺寸、参数
    编辑:llMURF20100CTR-ASEMI快恢复对管封装、尺寸、参数型号:MURF20100CTR品牌:ASEMI芯片个数:2芯片尺寸:102MIL*2封装:TO-220F恢复时间:50ns工作温度:-50°C~150°C浪涌电流:200A正向电流:20A反向耐压:1000V正向压降:1.10V引脚数量:2漏电流:>10uaMURF20100CTR二极管特性:MURF20100......
  • 封装一个Redis服务组件
    结构说明 ServiceCollectionExtensions类1usingcom.project.Redis.Common;2usingMicrosoft.Extensions.Configuration;3usingMicrosoft.Extensions.DependencyInjection;4usingSystem;56namespacecom.project.Redis7{8publicstaticclass......
  • Vue3组件二次封装
    naive-ui的n-input举例<template><n-inputclearableplaceholder=""v-bind="$attrs"><templatev-for="(value,name)in$slots"#[name]="slotData">......
  • 数据可视化组件封装
    数据可视化组件封装指南介绍数据可视化在现代应用程序开发中扮演着重要的角色。通过将数据以可视化的方式展示出来,我们可以更好地理解和分析数据。为了方便重复使用和维护,我们需要将数据可视化组件进行封装。在本文中,我将向你介绍数据可视化组件封装的流程和具体步骤。流程概述......