Java AES/ECB/PKCS5Padding加密和PHP解密的实现
起因
群里有个小伙伴提了个关于AES加解密的问题。Java加密,php解密。
参考网上写的代码,发现解密总是失败。
结论
排查发现是因为链接里面代码使用的是16字节的KEY(博主没有说明),也就是AES-128方案,但是小伙伴使用的却是32字节的KEY,所以解密总是不成功。抄了一个32字节KEY的Demo代码来验证一下。
Demo环境
系统:Windows
JDK版本
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
PHP版本
PHP 7.4.1 (cli) (built: Dec 17 2019 19:23:59) ( NTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
AES-128 Demo
1.将AES-256 Demo中 Key的长度改为16个字节
2.将AES-256 Demo中的AES-256-ECB改为AES-128-ECB
AES-256 Demo
不多说,直接上代码
PHP代码
<?php
/*** Created by PhpStorm.* User: Shinelon* Date: 2018/7/19* Time: 14:22*/class AES
{public static function encrypt($data, $key) {$data = openssl_encrypt($data, 'AES-256-ECB', $key, OPENSSL_RAW_DATA);return base64_encode($data);}public static function decrypt($data, $key) {$encrypted = base64_decode($data);return openssl_decrypt($encrypted, 'AES-256-ECB',$key, OPENSSL_RAW_DATA);}}$r = AES::decrypt('3pHJ2mb84CSTy9YTKBxH9A==','00112233440011223344001122334400');
$e = AES::encrypt('etstset','00112233440011223344001122334400');
echo $e . "\n";
echo $r . "\n";
?>
Java代码
public class TestMain {public static void main(String []args) throws Exception {Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("00112233440011223344001122334400".getBytes("utf-8"), "AES"));byte[] bytes = cipher.doFinal("helloworld".getBytes("utf-8"));System.out.println(new BASE64Encoder().encode(bytes));System.out.println(aesDecrypt("61gIBA+wmnHtx76YwLBF0A==","00112233440011223344001122334400"));}public static String aesDecrypt(String str, String key) throws Exception {if (str == null || key == null) return null;Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key.getBytes("utf-8"), "AES"));byte[] bytes = new BASE64Decoder().decodeBuffer(str);bytes = cipher.doFinal(bytes);return new String(bytes, "utf-8");}
}
上面代码经过测试,可以正常的加解密的,Java加密的数据,PHP可以解密;PHP加密的数据,Java也可以正常解密。
经过对比,如果AES KEY长度为16个字节,那PHP的解密方法要设置成AES-128-ECB;如果是32个字节,那PHP的解密方法需要设置成AES-256-ECB,还有另外一种KEY长度,就让小伙伴去探索了,估计代码差不了多少。
PS:
以上代码很多一部分是从网上百度过来的,原作者看到不要鄙视本人哈。
参考链接
1.Unable to replicate an encryption method from Java to PHP using AES/ECB/PKCS5Padding
2.PHP7 解决 java对应的 AES/ECB/PKCS5Padding 算法
3.一文详解AES最常见的3种方案_AES-128、AES-192和AES-256
Java AES/ECB/PKCS5Padding加密和PHP解密的实现相关推荐
- aesecbpkcs5 php_php AES/ECB/PKCS5Padding加密
AES/ECB/PKCS5Padding加密 error_reporting(E_ALL^E_NOTICE^E_WARNING);//此句要加上,否则会报php错误当iv位空时 class encry ...
- Java使用AES/EBC/PKCS5Padding加密,CryptoJS解密错误
const key = CryptoJS.enc.Utf8.parse('你的秘钥'); // 这里是需要注意的地方// 其次就是{mode: CryptoJS.mode.ECB},我用的是4.1.1 ...
- PHP7 openssl 实现 AES/ECB/PKCS5Padding加密
class CryptAES {/*** var string $method 加解密方法,可通过openssl_get_cipher_methods()获得*/protected $method;/ ...
- java aes cfb 256_aes加密解密源码,包括aes128、aes192、aes256位,以及cbc、cfb、ecb、ofb、pcbc模式...
AES加解密总共有以下这些 算法/模式/填充 字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding ...
- java AES文件流加密
java AES文件流加密 文章转载自:https://www.cnblogs.com/gne-hwz/p/14736496.html java工具类-对称加密算法AES 加密文件流 工具类出自jdk ...
- Java AES密码盐加密
Java AES密码盐加密 import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.codec.binary.Base64;im ...
- AES/ECB/PKCS7Padding 加密
算法:AES 模式:ECB 密钥长度:128位 密钥:自定义 补码方式:PKCS7Padding 加密结果编码方式:base64 aes_base64("123456") func ...
- java aes ctr_AES CBC和CTR加解密实例
http://www.metsky.com/archives/585.html 2012 AES(Advanced Encryption Standard,高级加密标准) 又叫Rijndael加密法, ...
- java pkcs1padding_RSA/ECB/PKCS1Padding加密
由于近期经常被改犇,我的有些犇犇会使用RSA/ECB/PKCS1Padding加密.我的公钥: Modulus: 7749508816481769130958656717979283807090064 ...
- C++或C 实现AES ECB模式加密解密,支持官方验证
本文主要介绍 AES 算法的加解密方法.本文使用的语言为 C++,调用的 AES 库为:cryptopp. 1 概述 AES 加密算法的介绍如下(摘自 WikiPedia): 高级加密标准(英语:Ad ...
最新文章
- 2021计算机技能高考考纲,2021年湖北省技能高考技能考试大纲(机械类).pdf
- iOS架构-制作静态库.a和.framework 的相互依赖(10)
- 高并发高流量网络架构
- python flask 设置个性化的响应体 响应头 状态码
- bzoj - 2038: [2009国家集训队]小Z的袜子(hose)
- 四年软件开发转行感受谈
- 数据结构与算法之循环队列的操作
- Lec 16 Projection matrices and least squares
- ps怎么做出针式打印机打印效果字体?
- Microsoft Office 2007 Beta 2 下载(含所有的CD-KEY)
- 大学计算机基础教程第12章软件技术基础
- 从零实现“百度网盘批量重命名”工具
- 漫天要价,就地还钱!
- BOF——Bag-of-Featrures
- Mac用Visual Studio Code编写C/C++安装配置教程
- matlab app designer使用心得
- 防止ARP欺骗的简单方法——静态绑定网关
- 『TinyOS』 nesC 1.1 语言参考手册
- 如何快速剪辑多个短视频,去除视频片尾
- 顾维灏谈百度地图数据采集:POI自动处理率达90%