flutter Dart AES 加密, 沒(méi)有初始向量的情況

轉(zhuǎn)自:
Dart AES CBC PKCS5Padding
作者:aYan124
鏈接:http://www.itdecent.cn/p/688cfe3f07b0


由于Android項(xiàng)目使用的加密方式參數(shù)為 AES/CBC/PKCS5Padding,所以在pub.com上一直沒(méi)有找到相匹配的插件,今天看到一篇文章說(shuō),其實(shí)Java的PKCS5Padding就是PKCS7Padding,所以就抱著試一試的心態(tài)(坑啊。。)用了一下encrypt插件加密,果然跟Java的加密結(jié)果一致,特此記錄一下。

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

final plainText = 'asddf';//加密文案
final key = encrypt.Key.fromUtf8('dsafsdafas');//加密key
final iv = encrypt.IV.fromUtf8('fsdafasdf');//偏移量

//設(shè)置cbc模式
final encrypter = encrypt.Encrypter(encrypt.AES(key,mode: encrypt.AESMode.cbc));

final encrypted = encrypter.encrypt(plainText, iv: iv);
final decrypted = encrypter.decrypt(encrypted, iv: iv);

print(decrypted); 
print(encrypted.base64); 

<meta charset="utf-8">

因Key文件名沖突,所以設(shè)置別名encrypt

參考文章:
http://zhuqiaochu.truestudio.tech/dart-java-swift-aes-cbc-pkcs7padding/
插件地址:
https://pub.dev/packages/encrypt#-readme-tab-

但是 對(duì)于沒(méi)有初始向量(IV)的情況, 比如, 我的原始java代碼加密,是如下的:

  private static final String ALGORITHMSTR_STRING = "AES/ECB/PKCS5Padding";

  private static byte[] aesToBytes(String content, String encryptKey) throws Exception {
        KeyGenerator aes = KeyGenerator.getInstance("AES");
        aes.init(128);
        Cipher cipher = Cipher.getInstance(ALGORITHMSTR_STRING);
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(), "AES"));
        return cipher.doFinal(content.getBytes(StandardCharsets.UTF_8));
    }

那么,用dart 實(shí)現(xiàn)的時(shí)候, 只需要給初始向量 長(zhǎng)度為0即可.

String aesEncode(String content, String aesKey) {
  //加密key
  final key = Encrypt.Key.fromUtf8(aesKey);
  //偏移量 - 注意這里
  final iv = Encrypt.IV.fromSecureRandom(0);

  //設(shè)置cbc模式
  final encrypter = Encrypt.Encrypter(
      Encrypt.AES(key, mode: Encrypt.AESMode.ecb, padding: 'PKCS7'));
  //加密
  final encrypted = encrypter.encrypt(content, iv: iv);
  return encrypted.base64;
}

此外, 還需要注意和解密一方,約定好加解密的模式是 cbc還是ecb

好了, 以上就是flutter中進(jìn)行AES加密的一些內(nèi)容.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容