导读:本文主要讨论如何通过 Java 方式实现 PHP 的 openssl_encrypt() 加密方法与 openssl_decrypt() 解密方法。本文例子加解密例子均采用 AES256 位 cbc 模式。

PHP利用openssl_encrypt实现数据的加密

openssl_encrypt 加密

  • $data:将被加密的明文。
  • $method:加解密方法,这里采用 AES-256-CBC,AES256位cbc模式的加密和解密
  • $KEY:加密秘钥。
  • $options :该值用于指定 openssl_encrypt() 数据返回格式。默认情况下返回Base64编码,当设置为 OPENSSL_RAW_DATA 时返回原数据。本文下面的Java实现将其默认为 0,(即返回Base64编码)
  • IV:要确保对 key 唯一。

上面的例子将字符串 "aaa" 通过 php 的 openssl_encrypt() 方法,采用 AES-256-CBC 加密方法加密进行加密。输出结果如下:

PHP利用openssl_decrypt实现数据的解密

openssl_decrypt 解密

上面例子将字符串 “/5kmWQpdiRumK21NRvmuww==” 通过 php 的 openssl_decrypt() 方法进行解密,输出结果如下:

使用 Java 实现 PHP 的 openssl_encrypt 和 openssl_decrypt实现数据的加解密

附上 Java 代码实现:

public class AesCbc256Util {    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";    private static final String KEY = "00000000000000000000000000000000";    private static final String IV = "1111111111111111";    //加密    public static String AES_cbc_encrypt(byte[] srcData, byte[] key, byte[] iv) throws Exception {        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");        Cipher cipher = Cipher.getInstance(ALGORITHM);        cipher.init(Cipher.ENCRYPT_MODE, keySpec, new IvParameterSpec(iv));        return Base64.getEncoder().encodeToString(cipher.doFinal(srcData));    }    //解密    public static String AES_cbc_decrypt(byte[] encData, byte[] key, byte[] iv) throws Exception {        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");        Cipher cipher = Cipher.getInstance(ALGORITHM);        cipher.init(Cipher.DECRYPT_MODE, keySpec, new IvParameterSpec(iv));        return new String(cipher.doFinal(Base64.getDecoder().decode(encData)));    }   }

测试:

 public static void main(String[] args) throws Exception {        // 加密        String s = AES_cbc_encrypt("aaa".getBytes(), KEY.getBytes(), IV.getBytes());        System.out.println(s);        //解密        String s2 = AES_cbc_decrypt("/5kmWQpdiRumK21NRvmuww==".getBytes(), KEY.getBytes(), IV.getBytes());        System.out.println(s2);    }

输出结果:

Java 实现分析

  1. 指定采用 AES-256-CBC 方法
  2. 由于上文 PHP 的 $option 值设置为 0,默认情况下返回Base64编码。所以在编写 Java 实现时需要在加密最后进行 Base64编码, 同理解码时也需要进行处理。

最后

以上就是 Java 实现 PHP 的 openssl_encrypt() 加密方法与 openssl_decrypt() 解密方法的解决方案。

感谢您的阅读,如果喜欢本文欢迎关注和转发,本头条号将坚持持续分享IT技术知识。对于文章内容有其他想法或意见建议等,欢迎提出共同讨论共同进步。

php aes加密解密_JAVA实现PHP的openssl_encrypt方法相关推荐

  1. java aes128加密解密_java AES 128 位加密解密算法

    最近在做app后台的服务器,使用到AES加密解密算法,无奈网上的都不符合要求,于是自己借鉴着写了一个AES加密解密工具. 密钥长度问题 默认 Java 中仅支持 128 位密钥,当使用 256 位密钥 ...

  2. java php aes加密解密_php aes 加密解密可与java对接

    php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...

  3. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  4. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  5. AES加密解密算法Java实现

    AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  6. openssl与cryptoAPI交互AES加密解密

    原文: http://blog.csdn.net/zhouyuqwert/article/details/7422467 有读者指出代码贴两遍,修改下. 继上次只有CryptoAPI的加密后,这次要实 ...

  7. c php aes加密解密,php的AES加密解密

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. $privateKey = "1234567812345678"; $ ...

  8. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

  9. C#中使用DES和AES加密解密

    代码 using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace M ...

最新文章

  1. python3线程中的锁机制
  2. 深度学习之三:深度学习基本思想
  3. SAP Marketing Engagement Management
  4. 第一张信用卡,该选哪家的?
  5. 一键将Python2代码自动转化为Python3
  6. c# 溢出抛异常_Rust竟然没有异常处理?
  7. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
  8. [Remoting]在.NET環境實作Flex 3 Remoting - (2) Flex Builder 環境設定
  9. python字符串对齐.format_python字符串格式化之.format
  10. python常用的十进制、16进制、字符串、字节串之间的转换
  11. ubuntu16.04 安装中文输入法
  12. 配置php apache,apache如何配置php
  13. java的本质_Java线程本质
  14. 计算机专业考研难么,计算机专业考研难吗
  15. LINUX 安装护眼软件
  16. 零基础如何入门学习电脑编程?
  17. 覃小龙课堂:小白如何影视剪辑月入10W,24小时全天带你
  18. TWaver使用中间点画折线方法
  19. Top 50 Most Popular APIs on RapidAPI (2018)
  20. CAD手机看图软件中怎么将CAD图纸转为PDF/图片格式?

热门文章

  1. linux 定时任务 (php)
  2. 迅雷精简版-纪念走过的时光
  3. Ubuntu下安装setuptools
  4. newton法分形图
  5. ServletContext读取属性文件
  6. 华硕a501lb5200加内存和固盘并装上win7系统并设置固盘为第一启动
  7. catia怎么将特征参数化_浅谈Catia VBA与参数化建模的结合
  8. python直方图教程_python如何画直方图
  9. linux 静态库 解包,libcurl编译linux静态库及使用总结(编译成功库下载)
  10. redis内存淘汰和持久化_REDIS的淘汰机制与持久化