一、该问题的重现步骤是什么?
1. 数据用 AesUtil.encryptToBase64 加密存储 电话号码
2. 用SQL语句 AES_DECRYPT(from_base64(od.contact_phone), 'O2BEeIv399qHQNhD6aGW8R8DEj4bqAAA') 解密,解密不成功
3.
二、你期待的结果是什么?实际看到的又是什么?
期待解密出电话号码 13912341234,实际是空的。
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
Bladex 2.8.1,linux
四、请提供详细的错误堆栈信息,这很重要。
无
五、若有更多详细信息,请在下面提供。
AesUtil 使用的是 CBC PKCS7 填充,mysql 查了下说默认使用的128位,加密方法为"ECB",填充方法为"PKCS7",
所以不一定能解出来。建议要么都用 mysql,要么都用 AesUtil,AesUtil 跟 js、dart 是通的
public class AesUtils { public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; private static byte[] encrypt(String context, String aesKey) { try { Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, generateMySqlAesKey(aesKey)); return cipher.doFinal(context.getBytes(DEFAULT_CHARSET)); } catch (Exception e) { // log.error(e.getMessage(), e); return new byte[0]; } } /** * 转换成mysql aes * * @param key key * @return SecretKeySpec */ public static SecretKeySpec generateMySqlAesKey(final String key) { final byte[] finalKey = new byte[16]; int i = 0; for (byte b : key.getBytes(DEFAULT_CHARSET)) { finalKey[i++ % 16] ^= b; } return new SecretKeySpec(finalKey, "AES"); } public static void main(String[] args) { byte[] encode = Base64.getEncoder().encode(encrypt("13912341234", "O2BEeIv399qHQNhD6aGW8R8DEj4bqAAA")); System.out.println(new String(encode)); } }
这样就好了,我是 18 号技师,记得好评!!!
讨论(1)
-
要用这个方法解密:org.springblade.core.tool.utils.AesUtil#decryptFormBase64
讨论(0)
- 热议问题
-
Loki日志聚合套件怎么设置不获取打印到控制台的日志,而是获取输出成一个文件的日志?
1
-
菜单里挂外部页面,不想每次切tab时,都刷新页面
1
-
bladex所有查询都没有带上tenantId,已经开启了多租户模式
1
-
物联网IOT-设备请求上下行日志数据保存不了
1
-
系统方法排序问题
1
-
物联网平台升级企业版本底座出现依赖相关问题
2
-
使用4.5.0,下载不了依赖
1
-
4.0.1版本,租户号全是000000
1
-
看了一下物联网平台新版本有很多升级 我想知道新版本多了哪些功能 有文档介绍吗
1
-
我想给物联网开放接口加接口认证 用验签 去开放 应该怎么做比较好
1
扫一扫访问 Blade技术社区 移动端