由于网上的代码大部分过于老旧并且很多雷同的文章,PHP加密部分基本都是基于mcrypt_xxx之类函数的代码,但是这类函数php7以后已经被移除了,导致折腾了10几个钟,总算使加密结果一致了,简单记录下,希望能帮到有需要的朋友。

注意以下几点就可以了:

1、java部分加密算法使用:AES/CBC/PKCS5Padding

2、客户端和服务端的key和IV的长度应该为16

3、java端的key不要使用KeyGenerator进行强化,那样会导致无法跨平台

废话不多说,来看代码~

PHP部分,这个其实也适用所有php版本:

class AESUtils {
	//key长度应该为16
	public static $key = "rb!nBwXv4C%Gr^84";
	//iv长度应该为16
	public static $iv = "1234567812345678";
	//配合Java端,使用128位,256位java端默认是不支持的
	public static $Method = 'AES-128-CBC';
	 * AES加密
	 * 可传入自定义密码
	 * $key
	public static function encrypt($cleartext,$key = ''){
		$key = empty($key) ? self::$key : $key;
		$encrypted = openssl_encrypt($cleartext, self::$Method, $key, OPENSSL_RAW_DATA, self::$iv);
		return base64_encode($encrypted);
	 * AES解密
	 * 可传入自定义密码
	 * $key
	public static function decrypt($encrypted,$key = ''){
		$key = empty($key) ? self::$key : $key;
		$encrypted = base64_decode($encrypted);
		$decrypted = openssl_decrypt($encrypted, self::$Method, $key, OPENSSL_RAW_DATA, self::$iv);
		return trim($decrypted);

java端:

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AESUtils {
    //IV长度应该为16,请跟服务端保持一致
    private static final String iv = "1234567812345678";
    //AES/CBC/PKCS5Padding默认对应PHP则为:AES-128-CBC
    private static final String CBC_PKCS5_PADDING = "AES/CBC/PKCS5Padding";
    private static final String AES = "AES";//AES 加密
     * @param key 这个key长度应该为16位,另外不要用KeyGenerator进行强化,否则无法跨平台
     * @param cleartext
     * @return
    public static String encrypt(String key, String cleartext){
        try {
            Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), AES);
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(cleartext.getBytes());
            //base64编码一下
            return Base64Encoder.encode(encrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
    public static String decrypt(String key, String encrypted){
            byte[] encrypted1 = Base64Decoder.decodeToBytes(encrypted);
            Cipher cipher = Cipher.getInstance(CBC_PKCS5_PADDING);
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), AES);
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());
            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);
            byte[] original = cipher.doFinal(encrypted1);
            //转换为字符串
            return new String(original);
        catch (Exception e) {
            e.printStackTrace();
            return null;
                    由于网上的代码大部分过于老旧并且很多雷同的文章,PHP加密部分基本都是基于mcrypt_xxx之类函数的代码,但是这类函数php7以后已经被移除了,导致折腾了10几个钟,总算使加密结果一致了,简单记录下,希望能帮到有需要的朋友。 注意以下几点就可以了:1、java部分加密算法使用:AES/CBC/PKCS5Padding2、客户端和服务端的key和IV的长度应该为163、jav...
   public static function encrypt($data, $key) {
       $data =  openssl_encrypt($data, 'aes-128-ecb', base64_decode($key), OPENSSL_RAW_DATA);
       return base64_encode($data);
    public static functi.
				
因为老版本与线上环境的mcrypt不兼容,在php7.1上使用会报错,官网也说了:Warning This function has been DEPRECATED as of PHP 7.1.0. Relying on this function is highly discouraged. 这里贴上解决办法。 先上7.0之前的代码:<?php class Security 鉴于原来的mcrypt_decrypt 已经被弃用了,现在和安卓对接的加密方式改为openssl_encrypt php 加密的key是32位,iv是16位纯数字,填充方式是 0, 加密算法如下 $res = openssl_encrypt($data, 'AES-2...
1 mcrypt = new MCrypt(); 2 /* Encrypt */ 3 String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") ); 4 /* Decrypt */ 5 St...
简介下载Android7.1.1源码花费了两天,编译整个源码同样花费了2天,期间遇到无数个坑。现在编译源码,一旦中间遇到错误,则要重新开始。本文记录编译过程遇到的问题及解决方案,如有编译源码需求的可以参考本文先把这些坑跳过然后再编译,Mac环境为10.12.4.编译步骤直接参考官方指导即可https://source.android.com/source/initializing.html 非常感谢您分享这篇关于php composer出错的博客!不仅帮助了自己,也为其他有同样问题的开发者提供了解决办法。我们鼓励您继续为社区贡献知识和经验。 基于您对php开发有深入了解,我们建议您可以写一篇关于使用composer进行依赖管理的技术博客,让更多的开发者了解如何更好地利用composer提高开发效率和可维护性。期待您的精彩分享! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 Zend Studio 0x80070666错误解决 四海一叶秋: 搜索最新可再发行,微软官网里下载。 Zend Studio 0x80070666错误解决 钦145: 你好,我想问一下软件装好了之后vc15-22的要去哪里下载 Zend Studio 0x80070666错误解决 不爱吃早餐: 真的有用!点击安装失败界面“log日志” 在日志里面查找路径,我找到最后一个路径是,[1A20:208] [2023-02-23T20:07:07]i304: Verified existing payload: ZendStudioMSIat path: C:\ProgramData\Package Cachel {84304901-F194-4755-B989-0CBFE0782374} v13. 5. 0\ZendStudio-13. 5. 0-win32. win32. ×86 64. msi.于是我在C盘里面查找,找到了这个程序!点击安装就好了呜呜呜 Zend Studio 0x80070666错误解决 四海一叶秋: 运行库2015 2017 2019 2022是高版本兼容低版本。直接装2015-2022运行库x86和x64版本兼容低版本。但是极个别安装包检查到高版本存在会当成错误,这时候只能先卸载所有2015到2022的,等软件装好了再重新补上2015-2022。