Flutter AES加密

引入依赖

encrypt: ^5.0.3

创建 aes_util.dart 文件

import 'package:encrypt/encrypt.dart' as encrypt;

class AESUtil {
  static String encryptAes({
    required String plainText,
    required String keyStr,
    required String ivStr,
    encrypt.AESMode? mode,
  }) {
    final key = encrypt.Key.fromUtf8(keyStr);
    final iv = encrypt.IV.fromUtf8(ivStr);
    final encrypter =
        encrypt.Encrypter(encrypt.AES(key, mode: mode ?? encrypt.AESMode.cbc));
    final encrypted = encrypter.encrypt(plainText, iv: iv);

    return encrypted.base64;
  }

  static String decryptAes(
      {required String encryptedStr,
      required String keyStr,
      required String ivStr,
      encrypt.AESMode? mode}) {
    final key = encrypt.Key.fromUtf8(keyStr);
    final iv = encrypt.IV.fromUtf8(ivStr);
    final encrypter =
        encrypt.Encrypter(encrypt.AES(key, mode: mode ?? encrypt.AESMode.cbc));
    final decrypted = encrypter.decrypt64(encryptedStr, iv: iv);

    return decrypted;
  }
}

AES加密举例:

var sign = DateUtil.formatDateMs(DateUtil.getNowDateMs(),
          format: 'yyyyMMddHHmmss');
sign = AESUtil.encryptAes(
          plainText: sign,
          keyStr: '加密密钥字符串',
          ivStr: '初始化向量字符串');

要素讲解

AES加密是典型的对称算法加密,支持正向加密和逆向解密,该算法主要有4个要素。当使用AES加密算法进行加密或解密时,有四个要素是必须考虑的。

一、加密或解密的字符串(Plaintext or Ciphertext):这是要进行加密或解密操作的实际字符串。对于加密操作,这个字符串是明文(Plaintext),它将被转换为加密后的密文(Ciphertext);对于解密操作,这个字符串是密文(Ciphertext),它将被还原为原始的明文。

二、加密密钥(Encryption Key):加密密钥是用于进行AES加密和解密的关键组成部分。它是一个固定长度的二进制值,如128位、192位或256位。密钥长度的选择取决于所使用的AES算法变体(例如AES-128、AES-192或AES-256)。密钥必须保密,并且加密和解密操作必须使用相同的密钥。

三、初始化向量(Initialization Vector, IV):初始化向量是一个固定长度的随机值,它被用作AES加密算法的额外输入。它的长度通常与AES区块大小相同,即128位。如果使用相同的密钥对不同的明文进行加密,则每个明文都需要使用不同的IV。IV的作用是确保相同的明文在不同加密过程中生成的密文是不同的,增加了密码的安全性。

四、加密模式(Encryption Mode):加密模式决定了AES算法如何处理长度超过一个区块大小的数据。常见的加密模式包括ECB、CBC、CFB和OFB等。以下是一些常用的加密模式:

1.电子密码本模式(Electronic Codebook Mode, ECB):每个明文块都被独立加密,相同的明文块将生成相同的密文块。
2.密码分组链接模式(Cipher Block Chaining Mode, CBC):每个明文块在加密之前都会与前一个密文块进行异或操作,增加了加密过程的随机性。
3.密文反馈模式(Cipher Feedback Mode, CFB):使用前一次加密的密文作为下一次加密的输入,可以支持加密和解密过程的流式处理。
4.输出反馈模式(Output Feedback Mode, OFB):将前一次的输出作为下一次的输入,可以支持加密和解密过程的流式处理。

选择适当的加密模式以及正确使用加密密钥和初始化向量(IV)是确保AES算法安全和可靠运行的重要因素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值