首页 > 编程语言 >AES加密 flutter java后台用的 AES/CBC/PKCS5Padding

AES加密 flutter java后台用的 AES/CBC/PKCS5Padding

时间:2023-08-11 10:02:14浏览次数:43  
标签:CBC AES java String iv result key byte

 

可测试AES是否正确的网址

https://www.toolhelper.cn/SymmetricEncryption/AES

 

java后台代码如下

public static String encrypt(String clearText, String key, String iv) {
        byte[] result = null;
        try {
            byte[] key_bytes = toByte(MD5Util.getMD5String(MD5Util.getMD5String(key)));
            result = encrypt(clearText.getBytes(), key_bytes, iv);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return toHex(result);
    }




    private static byte[] encrypt(byte[] clear, byte[] raw, String iv) throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(iv.getBytes()));
        byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
    }

    public static byte[] toByte(String hexString) {
        int len = hexString.length() / 2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++) {
            result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue();
        }
        return result;
    }

    private static String toHex(byte[] buf) {
        if (buf == null)
            return "";
        StringBuffer result = new StringBuffer(2 * buf.length);
        for (int i = 0; i < buf.length; i++) {
            appendHex(result, buf[i]);
        }
        return result.toString();
    }

 

测试用例

clearText = test123456    key = 1691645969   iv = a0fe7c7c98e09e8c   最后aes后 30f3084aae678924002f6f0c41e77784

加密文本 test123456,java后台对 key时间戳 1691645969, MD5了两次,然后进行AES。AES的iv是  a0fe7c7c98e09e8c

 

切记 java 后台 AES/CBC/PKCS5Padding,PKCS5 和 PKCS7 是一样的。其他平台测试时可以用 PKCS7.

flutter 用的三方库 

  encrypt: ^5.0.1 #AES
  crypto: ^3.0.3 #MD5

导入头文件

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

代码

    DateTime today = DateTime.now();
    int date1 = today.millisecondsSinceEpoch;
    print('当前时间戳:$date1');
    var nonce = '$date1';
    nonce = '1691645969';
    print('nonce:$nonce');
    var key = md5Crypto(md5Crypto(nonce));
    print('key:$key');
    var pwdCryptStr = aesEncrypted('test123456', key, 'a0fe7c7c98e09e8c');
    print(pwdCryptStr);

开始 key 和 iv 都用的 fromUtf8,和后台生成的总是不一致,总以为是 mode 的问题。幸亏那测试网址了,可以一个个测试结果。

  String aesEncrypted(String str, String aesKey, String ivStr){
    final key = ce.Key.fromBase16(aesKey);
    final iv = ce.IV.fromUtf8(ivStr);
    final encrypter = ce.Encrypter(ce.AES(key, mode: ce.AESMode.cbc));
    final encrypted = encrypter.encrypt(str,iv: iv);
    return encrypted.base16.toLowerCase();
  }

 

标签:CBC,AES,java,String,iv,result,key,byte
From: https://www.cnblogs.com/huangzs/p/17622274.html

相关文章

  • Javascript学习笔记-js实现拷贝复制功能
    /***复制单行内容到粘贴板*content:需要复制的内容*message:复制完后的提示,不传则默认提示"复制成功"*/functioncopyToClip(content,message){varaux=document.createElement("input");aux.setAttribute("value"......
  • java反射
    1.回顾泛型:[泛型类,泛型接口,泛型方法]publicclass类名<泛型标志...>{​//使用泛型标志定义数据类型}publicinterface接口<泛型标志>{​//使用泛型标志定义抽象方法}publicclass类名implements接口<泛型类型>{}publicclass类名<泛型标志>imp......
  • java_数据类型
    graphLR;java数据类型-->基本数据类型java数据类型-->引用数据类型1.基本类型graphLR;基本类型-->数值型基本类型-->字符型("字符型(char[2字节])")基本类型-->布尔型("布尔型(boolean[1字节]存放true/false)")数值型-->整数("整数(byte[1......
  • 【Java】从头开始的Java复健day4
    用的书:《Java从入门到精通》day1(3.1-3.3):【Java】从头开始的Java复健day1day2(3.4-3.8):【Java】从头开始的Java复健day2day3(4.1-4.3):【Java】从头开始的Java复健day3第四章流程控制4.5小结略略4.6练习题目写输出里了publicclassJava_test4_6{public......
  • 如何使用原生 JavaScript Canvas API 实现视频中的绿幕背景替换功能 All In One
    如何使用原生JavaScriptCanvasAPI实现视频中的绿幕背景替换功能AllInOneCanvas&Videodemoschroma-keying/greenscreeneffectconstprocessor={};processor.doLoad=functiondoLoad(){constvideo=document.getElementById("video");this.vid......
  • 《深入理解Java虚拟机》读书笔记:垃圾收集算法
    由于垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,因此本节不打算过多地讨论算法的实现,只是介绍几种算法的思想及其发展过程。垃圾收集算法概要 1、标记-清除算法标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,算法分......
  • 【JavaScript36】HTML DOM创建/插入/删除/替换元素
    createElement创建元素document.createElement()可以创建一个元素document.createTextNode()创建一个文本节点appendChild()方法可向节点的子节点列表的末尾添加新的子节点。<divid="demo"><pid="p1">这是文本内容</p></div><script>//div下添加一个子元......
  • 【JavaScript34】获取和修改属性节点
    根据W3C的HTMLDOM标准,HTML文档中的所有内容都是节点:整个文档是一个文档节点每个HTML元素是元素节点HTML元素内的文本是文本节点每个HTML属性是属性节点注释是注释节点属性节点比如有一个p标签元素节点<pid="p2"class="text-center">点我看看</p>-那......
  • 【JavaScript35】innerText 和 innerHTML
    获取内容时innerHTML从对象的起始位置到终止位置的全部内容,还包括HTML标签。innerText会去掉标签的内容。innerText和innerHTML获取内容示例<divid="demo"><pid="p1"><strong>这是文本内容</strong></p>helloworld!</div><script>......
  • java_3种注释语句
    1.内容解释//内容单行注释/*内容*/多行注释/***内容*/文档注释2.多行注释与文档注释的区别多行注释:文档注释:JDK提供的工具javadoc解析注释的内容,就是生成了javaAPI文档3.生成步骤4.javadoc标签标签描述示例@author标识......