在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,更多Java专业知识,广州疯狂java培训为你讲解;公司的项目开发中 遇到了JAVA和PHP的加密解密跨平台的问题 经过多方查找资料以及研究找出一个通用的基础加解密方案如下
1:JAVA代码 (3DES版)
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.log4j.Logger;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* Java版3DES加密解密,适用于PHP版3DES加密解密(PHP语言开发的MCRYPT_3DES算法、
MCRYPT_MODE_ECB模式、PKCS7填充方式)
* @author G007N
*/
public class DesBase64Tool {
private static SecretKey secretKey = null;//key对象
private static Cipher cipher = null; //私鈅加密对象Cipher
private static String keyString = "AKlMU89D3FchIkhKyMma6FiE";//密钥
private static Logger log = Logger.getRootLogger();
static{
try {
secretKey = new SecretKeySpec(keyString.getBytes(), "DESede");//获得密钥
/*获得一个私鈅加密类Cipher,DESede是算法,ECB是加密模式,PKCS5Padding是填充方式*/
cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
/**
* 加密
* @param message
* @return
*/
public static String desEncrypt(String message) {
String result = ""; //DES加密字符串
String newResult = "";//去掉换行符后的加密字符串
try {
cipher.init(Cipher.ENCRYPT_MODE, secretKey); //设置工作模式为加密模式,给出密钥
byte[] resultBytes = cipher.doFinal(message.getBytes("UTF-8")); //正式执行加
密操作
BASE64Encoder enc = new BASE64Encoder();
result = enc.encode(resultBytes);//进行BASE64编码
newResult = filter(result); //去掉加密串中的换行符
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return newResult;
}
/**
* 解密
* @param message
* @return
* @throws Exception
*/
public static String desDecrypt(String message) throws Exception {
String result = "";
try {
BASE64Decoder dec = new BASE64Decoder();
byte[] messageBytes = dec.decodeBuffer(message); //进行BASE64编码
cipher.init(Cipher.DECRYPT_MODE, secretKey); //设置工作模式为解密模式,给出密钥
byte[] resultBytes = cipher.doFinal(messageBytes);//正式执行解密操作
result = new String(resultBytes,"UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 去掉加密字符串换行符
* @param str
* @return
*/
public static String filter(String str) {
String output = "";
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
int asc = str.charAt(i);
if (asc != 10 && asc != 13) {
sb.append(str.subSequence(i, i+1));
}
}
output = new String(sb);
return output;
}
/**
* 加密解密测试
* @param args
*/
public static void main(String[] args) {
try {
String strText = "Hello world!";
String deseResult = desEncrypt(strText);//加密
System.out.println("加密结果:"+deseResult);
String desdResult = desDecrypt(deseResult);//解密
System.out.println("解密结果:"+desdResult);
} catch (Exception e) {
e.printStackTrace();
}
}
}
疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。技术知识沉淀深厚的老师,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,成为真正的技术高手;通过大量全真企业项目疯狂训练,迅速积累项目经验。让你成为技能型的现代化高端人才,迅速获得高薪就业!时间不等人,赶紧联系我们吧!疯狂java培训中心地址:广州天河区车陂沣宏大厦3楼。
请发表评论