PHP mcrypt_encrypt使用给定的 cipher 和 mode 加密的数据,没有使用pkcs5_pad()函数填充的情况下,如果数据长度不是n*分组大小,则在其后使用“0”补齐。

Java 不能使用AES/ECB/PKCS5Padding,因为填充方式与php不同,不能正常的解密

在java中应该使用AES/ECB/NoPadding方式,手动使用"0",填充补齐

一、PHP加密解密类示例:

/**

* AES

* AES加密解密算法

* Created by PhpStorm.

* Date: 2015/4/28

* Time: 15:41

*/

namespace Fin\App\Library\Util;

class AES {

/**

* 算法,另外还有192和256两种长度

*/

const CIPHER = MCRYPT_RIJNDAEL_128;

/**

* 模式

*/

const MODE = MCRYPT_MODE_ECB;

/**

* 加密

* @param string $key 密钥

* @param string $str 需加密的字符串

*

* @return string

*/

static public function encode($key, $str)

{

if(empty($key)){

$key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

}

$size = mcrypt_get_iv_size(self::CIPHER, self::MODE);

$iv = mcrypt_create_iv($size, MCRYPT_RAND);

$string = mcrypt_encrypt(self::CIPHER, $key, $str, self::MODE, $iv);

$string = base64_encode($string);

return $string;

}

/**

* 解密

* @param type $key

* @param type $str

*

* @return string

*/

static public function decode($key, $str)

{

if(empty($key)){

$key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

}

$size = mcrypt_get_iv_size(self::CIPHER, self::MODE);

$iv = mcrypt_create_iv($size, MCRYPT_RAND);

$string = base64_decode($str);

$string = mcrypt_decrypt(self::CIPHER, $key, $string, self::MODE, $iv);

/**

* 解决下边问题

* the given cipher and mode. If the size of the data is not n * blocksize,

* the data will be padded with '\0'.

*/

$string = trim($string);

return $string;

}

}

二、 JAVA加密解密类示例:

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

import org.apache.commons.lang3.*;

public class Security {

public static String encrypt(String input, String key) {

byte[] crypted = null;

try {

input = StringUtils.rightPad(input, 16, "\0");

SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");

cipher.init(Cipher.ENCRYPT_MODE, skey);

crypted = cipher.doFinal(input.getBytes());

} catch (Exception e) {

System.out.println(e.toString());

}

return new String(Base64.encodeBase64(crypted));

}

public static String decrypt(String input, String key) {

byte[] output = null;

try {

SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");

cipher.init(Cipher.DECRYPT_MODE, skey);

output = cipher.doFinal(Base64.decodeBase64(input));

} catch (Exception e) {

System.out.println(e.toString());

}

return new String(output);

}

public static void main(String[] args) {

String key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";

String data = "412016278912497";

System.out.println(Security.encrypt(data, key));

System.out.println(Security.decrypt(Security.encrypt(data, key), key));

}

}

java mcrypt encrypt_PHP mcrypt_encrypt加密,使用java解密相关推荐

  1. java linux aes_java AES 加密和linux解密

    java AES 加密:package app; import static java.nio.charset.StandardCharsets.US_ASCII; import static jav ...

  2. java 和 Android Base64加密,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  3. [JAVA实战篇] AES加密的JAVA实现及AES算法讲解

    AES加密算法原理 1. S-P结构加密 AES加密算法是2001年由美国提出的互联网加密算法,从密码学的角度来讲,AES是典型的S-P结构加密.什么是S-P结构加密呢,手残博主画了一张图帮助大家理解 ...

  4. 用java实现凯撒加密系统,JAVA如何实现caesar凯撒加密算法

    Carsar加密算法在java中是最简单的加密算法,那么你知道要如何实现吗?下面我们就去看看JAVA如何实现caesar凯撒加密算法的内容. public class Caesar { public ...

  5. java之php、Android、JAVA、C# 3DES加密解密

    异常如下 1.javax.crypto.BadPaddingException: Given final block not properly padded 1)要确认下是否加密和解密都是使用相同的填 ...

  6. 3des加密 java php_java的3DES加密PHP7解密备忘录

    前言: 有一个项目需要跟甲方做接口,甲方使用的是java的3DES加密解密方式. 甲方加密解密部分截图代码: 填写图片摘要(选填) 第一步: 将甲方的iv转成PHP可以使用的偏移量 填写图片摘要(选填 ...

  7. java和c 的rsa加密算法_RSA算法签名技术Java与C++统一(加密解密结果一样)

    RSA算法签名技术Java与C++统一 (加密解密结果一样) 源代码下载地址:http://www.doczj.com/doc/64f44a94a0116c175f0e484d.html/produc ...

  8. C# Java间进行RSA加密解密交互

    C# Java间进行RSA加密解密交互 原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益, ...

  9. node-rsa加密,java解密调试

    用NODE RSA JS 加密解密正常,用JAVA RSAUtils工具类加密解密正常.但是用node加密玩的java解密不了.原因:node默认的是 DEFAULT_ENCRYPTION_SCHEM ...

最新文章

  1. Eclipse工程标准目录层次结构
  2. 一个MySQL时间戳精度引发的血案
  3. matlab中 bsxfun函数
  4. sortingOrder,sortingLayer
  5. 清北·NOIP2017济南考前冲刺班 DAY1 morning
  6. 工作288:跨组件传值
  7. 软考系统架构师笔记-最后知识点总结(四)
  8. Matlab面向对象编程
  9. jdbctemplate无where条件查询_多表查询
  10. function与感叹号!
  11. 【ElasticSearch】使用 _validate API 在不执行查询的情况下验证查询
  12. 使用spring 配置数据源,并用数据源得到连接,操作sql
  13. iOS底层探索之Runtime(一):运行时方法的本质
  14. 华为USG6000防火墙安全策略配置实例(CLI方式)
  15. html微博登录代码,微博第三方登陆js实现
  16. 斐讯路由器宽带运营商服务器,斐讯K2路由器的连接及上网设置教程
  17. 用python孵一颗彩蛋,今日份来自程序员的浪漫
  18. 计算机打印机端口号,网络打印机端口号.doc
  19. 如何评估互联网广告效果
  20. 《割绳子》《蜡笔物理学》《Contre Jour》《顽皮鳄鱼爱洗澡》等游戏用Box2D引擎实现物理部分的方法(转)...

热门文章

  1. 898. 子数组按位或操作
  2. jenkins active exited(待编辑)
  3. 解决vscode下载速度慢的方法
  4. idea设置java scala等代码自动换行
  5. ubuntu安装完后需进行必要的软件更新
  6. k8s安装之Linux centos7升级内核到4.18以上
  7. 图解Hadoop hdfs写数据流程
  8. Python Django 多对多表设计
  9. JDBC的CRUD操作之PreparedStatement的查询操作
  10. MySQL Percona PXC集群实现MySQL主从复制强一致性