PHP的openssl_encrypt方法的Java实现
<?php
class OpenSSL3DES
{
/*密钥,22个字符*/
const KEY='09bd821d3e764f44899a9dc6';
/*向量,8个或10个字符*/
const IV='2M9tOpWi'; /**
* 加密
* @param boolean $status 是否加密
* @return string 处理过的数据
* Java语言的实现地址:
* https://www.cnblogs.com/-ccj/p/10372497.html
* https://blog.csdn.net/xiojing825/article/details/78491374
*/
public static function encrypt($data,$status=false){
if ($status){
return urlencode(base64_encode(openssl_encrypt($data, 'des-ede3-cbc', self::KEY, OPENSSL_RAW_DATA, self::IV)));
}
return $data;
}
/**
* 解密
* @return string 加密的字符串不是完整的会返回空字符串值
*/
public static function decrypt($data,$status=false){
if ($status){
return openssl_decrypt(base64_decode(urldecode($data)), 'des-ede3-cbc', self::KEY, OPENSSL_RAW_DATA, self::IV);
}
return $data;
}
}
/*用户登录JSON参数*/
$sign = json_encode(array(
'username'=>'admin',
'password'=>'123456',
'time_token'=>time() + (7 * 24 * 60 * 60)
));
$sign_encrypt=OpenSSL3DES::encrypt($sign,true);
echo $sign_encrypt;
echo OpenSSL3DES::decrypt($sign_encrypt,true);
?>
Java对应实现:
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64; /**
* @author Administrator
* @create 2019-03-20
* @desc 安全工具类
**/
public class SecurityUtil {
public static final String KEY = "09bd821d3e764f44899a9dc6";
public static final String IV = "2M9tOpWi";
public static final String DEFAULT_ENC_NAME = "UTF-8"; public static String java_openssl_encrypt(String data) {
return java_openssl_encrypt(data, IV);
} /**
* java_openssl_encrypt加密算法
*
* @param data
* @param iv
* @return
* @throws Exception
*/
public static String java_openssl_encrypt(String data, String iv) {
try {
Cipher cipher = createCipher(iv, Cipher.ENCRYPT_MODE);
return URLEncoder.encode(Base64.getEncoder().encodeToString(cipher.doFinal(data.getBytes())), DEFAULT_ENC_NAME);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
} public static String java_openssl_decrypt(String data) {
return java_openssl_decrypt(data, IV);
} /**
* java_openssl_decrypt解密
*
* @param data
* @param iv
* @return
*/
public static String java_openssl_decrypt(String data, String iv) {
try {
Cipher cipher = createCipher(iv, Cipher.DECRYPT_MODE);
return new String(cipher.doFinal(Base64.getDecoder().decode(URLDecoder.decode(data, DEFAULT_ENC_NAME))));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
} /**
* 创建密码器Cipher
*
* @param iv
* @param mode 加/解密模式
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
* @throws InvalidAlgorithmParameterException
*/
private static Cipher createCipher(String iv, int mode) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, InvalidAlgorithmParameterException {
byte[] key = KEY.getBytes();
Cipher cipher = Cipher.getInstance("DESede/CBC/PKCS5Padding");
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv.getBytes());
cipher.init(mode, new SecretKeySpec(key, "DESede"), ivParameterSpec);
return cipher;
}
}
PHP的openssl_encrypt方法的Java实现的更多相关文章
- PHP的openssl_encrypt方法的JAVA和JS的实现
这次在JAVA项目中遇到了要使用PHP的openssl_encrypt这个方法来进行加密以下是内容分享: 在PHP中加密内容是: // openssl_encrypt($data, $method, ...
- 记一次使用修改字节码的方法解决java.lang.NoSuchMethodError
接兔兔国际sdk ane 充值界面选择兔币充值就会闪退, 观察logcat 04-19 10:10:54.224: E/AndroidRuntime(20315): FATAL EXCEPTION: ...
- JAVA写JSON的三种方法,java对象转json数据
JAVA写JSON的三种方法,java对象转json数据 转自:http://www.xdx97.com/#/single?bid=5afe2ff9-8cd1-67cf-e7bc-437b74c07a ...
- maven 在clean package时,出现:找不到符号 [ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 解决办法
另一个项目中增加了,sqlDdlFilter 在调用的项目中clean package时,出现 找不到符号[ERROR] 符号: 方法 sqlDdlFilter(java.lang.String) 原 ...
- 在命令行中直接运行带main方法的java
用了很久的java,基本都是交给服务器完成的执行,有page之类的入口,或者是在IDE工具中直接 Run As Java Application. 并且一直对安装java之后配置JAVA_HOME,p ...
- 两个变量交换的四种方法(Java) 七种方法(JS)
两个变量交换的四种方法(Java) 对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) 1 class TestEV 2 ...
- atitit.判断时间重叠方法总结 java c++ c#.net js php
atitit.判断时间重叠方法总结 java c++ c#.net js php 1. 判断时间重叠具体流程思路 1 2. 重叠算法 实际上就是日期集合跟个时间集合的的交集(乘法算法) 1 3. 代 ...
- 设计模式之第1章-工厂方法模式(Java实现)
设计模式之第1章-工厂方法模式(Java实现) “我先来”,“不,老公,我先!”.远远的就听到几个人,哦不,是工厂方法模式和抽象工厂模式俩小夫妻在争吵,尼妹,又不是吃东西,谁先来不都一样(吃货的世界~ ...
- 2种方法实现java对象的深拷贝
2种方法实现java对象的深拷贝 2017年12月03日 22:23:07 iCoding91 阅读数 4420更多 分类专栏: java 版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...
随机推荐
- [20180603]Python读写csv
原文:https://docs.python.org/3/library/csv.html 进入python官网后,选择document,然后选择library reference. 读取: impo ...
- maven 项目连接mysql8.0版本时的注意事项
MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 以前的maven项目,要注意依赖的注入 查看pom. ...
- Java RSA 公钥加密私钥解密
package com.lee.utils; import java.io.DataInputStream; import java.io.File; import java.io.FileInput ...
- MTK 使用iptable 命令来完成网络路由(android WIFI/4G分享网络)
很多时候,总有些奇怪的需求,这时候是发挥我们的聪明才智的时候!! 有客户的需求是: 公网 WIFI 4G/其他网络 以太网1 以太网2 内部设备 描述下需求:现今有一个控制设备,里面有WIFI,物联网 ...
- KVO的使用二:常用方法及小技巧
(文章及代码接上一篇) options详解: KVO的注册方法中有一个options枚举,用来确定观察者的接收消息方法接收的信息,那么具体有什么关联呢?下面通过一段代码来验证是如何关联的.依次选择op ...
- 【mac微信小助手】WeChatPlugin使用教程!
微信小助手 mac版集微信防撤回和微信多开等诸多功能于一身,可以有效的阻止朋友微信撤回消息,还能开启无手机验证登录,再也不用每次登录扫码验证啦,非常方便! wechatplugin mac版安装教 ...
- 关于Tomcat启动时,长时间停在Initializing Spring root webApplicationContext处的原因
1.大家肯定经常会遇到这样的问题,以前启动tomcat都不会出问题.现在一起动就会卡到Initializing Spring root webApplicationContext处,tomcat会报连 ...
- 机器学习总结(八)决策树ID3,C4.5算法,CART算法
本文主要总结决策树中的ID3,C4.5和CART算法,各种算法的特点,并对比了各种算法的不同点. 决策树:是一种基本的分类和回归方法.在分类问题中,是基于特征对实例进行分类.既可以认为是if-then ...
- Python模块 2
collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型: 1.namedtuple: 生成可以使用名字来访问 ...
- Docker 简单部署 ElasticSearch
https://www.cnblogs.com/jianxuanbing/p/9410800.html