openssl加密 适用于 php+Java/Android
2016-01-20 00:58
561 查看
APP开发,为了提高数据传输的安全性,针对敏感信息进行AES对称加密
http://bouncycastle.org/latest_releases.html,我使用的是bcprov-jdk16-146.jar
客户端 app 加密
需要 jarhttp://bouncycastle.org/latest_releases.html,我使用的是bcprov-jdk16-146.jar
/** * @author xiaoxin */ import java.io.IOException; import java.lang.reflect.Method; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.interfaces.RSAPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.jce.provider.BouncyCastleProvider; import sun.misc.BASE64Decoder; public class AESUtil { private static final String ALGORITHM = "AES"; private static final String TRANSFORMATION = "AES/CBC/PKCS7Padding"; private static final String SECRET_KEY = "key-32-char-long"; private static final String SECRET_IV = "111111111111111"; // 16位随机串 public static void main(String[] args) throws Exception{ String sf = "test"; String encrypt = encodeBase64(getCipher(Cipher.ENCRYPT_MODE).doFinal(sf.getBytes())); // encrypt 打印的值 直接在在PHP代码中解密 System.out.println(encrypt); } /*** * encode by Base64 */ public static String encodeBase64(byte[]input) throws Exception{ Class clazz=Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64"); Method mainMethod= clazz.getMethod("encode", byte[].class); mainMethod.setAccessible(true); Object retObj=mainMethod.invoke(null, new Object[]{input}); return (String)retObj; } /*** * decode by Base64 */ public static byte[] decodeBase64(String input) throws Exception{ Class clazz=Class.forName("com.sun.org.apache.xerces.internal.impl.dv.util.Base64"); Method mainMethod= clazz.getMethod("decode", String.class); mainMethod.setAccessible(true); Object retObj=mainMethod.invoke(null, input); return (byte[])retObj; } private static Cipher getCipher(int ENCRYPT_MODE) throws Exception { Cipher cipher = Cipher.getInstance(TRANSFORMATION ,new BouncyCastleProvider()); cipher.init(ENCRYPT_MODE, new SecretKeySpec(SECRET_KEY.getBytes(), ALGORITHM), new IvParameterSpec(SECRET_IV.getBytes())); return cipher; } }
服务端 php 解密
首先 安装openssl扩展<?php $key = "key-32-char-long"; $cipher = "AES-256-CBC"; // 加密算法 填充模式 加密模式 $iv = "111111111111111"; // 16位随机串--与android端加密串参数保持一致,在此复用 $encrypt = "encrypt"; // android 端输出的信息 $toDectypt = openssl_decrypt($encrypt, $cipher, $key , 0 , $iv); var_dump($toDectypt); // 正确输出 test
相关文章推荐
- OpenSSL编程之RSA
- 怎样安装openssl 2011-12-11
- 用ASP编写的加密和解密类
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- BAT加密工具 EncryBat 非编译型bat批处理加密方案与代码
- C#对称加密(AES加密)每次生成的结果都不同的实现思路和代码实例
- SQLServer 2008中的代码安全(一) 存储过程加密与安全上下文
- 实例讲解SQL Server加密功能
- C#实现对文件进行加密解密的方法
- C#实现数据包加密与解密实例详解
- C#最简单的字符串加密解密方法
- C#加密app.config中连接字符串的方法
- C#使用伪随机数实现加密用户密码的方法
- asp MD5加密方式使用建议
- C#对称加密与非对称加密实例
- 浅谈C#中Md5和Sha1两种加密方式
- 基于C#对用户密码使用MD5加密与解密
- vbs shellcode转换escape加密
- PHP加密解密字符串汇总
- PHP加密解密实例分析