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 实现剖析
指定采取 AES-256-CBC 方法由于上文 PHP 的 $option 值设置为 0,默认情形下返回Base64编码。以是在编写 Java 实现时须要在加密最后进行 Base64编码, 同理解码时也须要进行处理。末了以上便是 Java 实现 PHP 的 openssl_encrypt() 加密方法与 openssl_decrypt() 解密方法的办理方案。
感谢您的阅读,如果喜好本文欢迎关注和转发,本头条号将坚持持续分享IT技能知识。对付文章内容有其他想法或见地建议等,欢迎提出共同谈论共同进步。