IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter 的AES加密(NoPadding填充方式) -> 正文阅读

[移动开发]Flutter 的AES加密(NoPadding填充方式)

AES有五种加密模式,有CBC、ECB、CTR、OCF、CFB五种

文章目录

前言

一、Java版本对应的AES 加密

二、Flutter版本的AES加密和解密

1.引入库

2.封装成加解密工具

总结



前言

? ? ? ? 正在做flutter版本的BLE项目的时候,发现flutter好多库不能实现Java 的这种 "AES/ECB/NoPadding" 方式的AES的加密,导致加密的报文和Java 的不一致,随机在网上找了好久终于找到了可以一个支持ECB 模式并且支持NoPadding填充模式的AES加密的库


一、Java版本对应的AES 加密

这个是java 版本的AES加密,基于ECB模式,并且使用了NoPadding方式填充。

public class AesUtil {
    private static final String TAG = "AesUtil";
    public static final byte[] key_oxo = 您的秘钥;
    public static byte[] Encrypt(byte[] sSrc) {
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(key_oxo, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(sSrc);
            return encrypted;
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.d(TAG, "ex: "+ex.getLocalizedMessage());
            return null;
        }
    }

    public static byte[] Decrypt(byte[] sSrc) {
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(key_oxo, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] dncrypted = cipher.doFinal(sSrc);
            return dncrypted;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}

二、Flutter版本的AES加密和解密

1.引入库

? 比较火的库,比如encrypt并不支持NoPadding填充方式,下面这个库可以支持,在pubspec.yaml中引入下面的库? 对应的地址?encryptions | Flutter Package

encryptions: ^1.1.0+1

??

2.封装成加解密工具

import 'dart:typed_data';

import 'package:encryptions/encryptions.dart';
import 'package:convert/convert.dart';

class AesUtil {
  static List<int> key_oxo = 您的秘钥;

  /**
   * AES 加密
   */
  static Future<String> encryptData(final String originHex) async {
    Uint8List key = Uint8List.fromList(key_oxo);
    Uint8List plain = Uint8List.fromList(hex.decode(originHex));
    AES aes = AES.ofECB(key, PaddingScheme.NoPadding);
    Uint8List encrypted = await aes.encrypt(plain);
  
    String encryptHex = "";
    for (int i = 0; i < encrypted.length; i++) {
      String temp = encrypted[i].toRadixString(16);
      if (temp.length == 1) {
        temp = "0${temp}";
      }
      encryptHex = encryptHex + temp.toUpperCase();
    }
    return encryptHex;
  }

  /**
   * AES 解密
   */
  static Future<String> decryptData(final String originHex) async {
    Uint8List key = Uint8List.fromList(key_oxo);
    Uint8List plain = Uint8List.fromList(hex.decode(originHex));
    AES aes = AES.ofECB(key, PaddingScheme.NoPadding);
    Uint8List decrypted = await aes.decrypt(plain);
   
    String decryptHex = "";
    for (int i = 0; i < decrypted.length; i++) {
      String temp = decrypted[i].toRadixString(16);
      if (temp.length == 1) {
        temp = "0${temp}";
      }
      decryptHex = decryptHex + temp.toUpperCase();
    }
    return decryptHex;
  }

}

然后直接调用相应的方法就可以就行

 String result1 = await AesUtil.encryptData(hex1);
    print("hex1===${result1}");
    String result2 = await AesUtil.decryptData(hex2);
    print("hex2===${result2}");

总结

不同于的一般的项目使用CBC模式加密和解密使用,Iot设备一般常用基于ECB模式的通信加密方法。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:09:06  更:2022-10-31 12:09:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 21:03:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码