import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
public class DesUtils {
static {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
}
static boolean debug = true;
private static String Algorithm = "AES";
private static String secutiyKey = "1234567812345678";
private static String fileName1="DESPW1.class";
private static String fileName2="DESPW2.class";
public static String getKey() throws Exception {
String ret = "";
URL url=DesUtils.class.getResource("");
// 1.read the key from 1st file
ret =new String(hex2byte(FileUtils.readFileToString(new File(url.getPath()+"/"+fileName1))));
// 2.read the key from 2nd file
// 3.combine the keys
ret = ret + new String(hex2byte(FileUtils.readFileToString(new File(url.getPath()+"/"+fileName2))));
// 4.change them to the byte array
return ret;
}
public static void writeKeyToFile(){
String key=StringUtils.strip(secutiyKey);
int lenght=key.length();
String prefix="";
String afterFix="";
if(lenght>0){
prefix=StringUtils.substring(key, 0, lenght/2);
afterFix=StringUtils.substring(key, lenght/2+1, lenght);
URL url=DesUtils.class.getResource("");
try {
FileUtils.writeStringToFile(new File(url.getPath()+"/"+fileName1), byte2hex(prefix.getBytes()));
FileUtils.writeStringToFile(new File(url.getPath()+"/"+fileName2), byte2hex(afterFix.getBytes()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static byte[] encodeConfig(byte[] set, byte[] key) {
byte[] ret = null;
// byte[] key = "tnts".getBytes();
try {
SecretKeySpec sk = new SecretKeySpec(key, Algorithm);
Cipher c1;
c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, sk);
ret = c1.doFinal(set);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ret;
}
public static byte[] decodeConfig(byte[] set, byte[] key) {
byte[] ret = null;
try {
// byte[] key = getKey();
SecretKeySpec sk = new SecretKeySpec(key, Algorithm);
Cipher c1;
c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, sk);
ret = c1.doFinal(set);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ret;
}
// byte数组转换为16进制字符串
public static String byte2hex(byte[] data) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < data.length; i++) {
String temp = Integer.toHexString(((int) data[i]) & 0xFF);
for (int t = temp.length(); t < 2; t++) {
sb.append("0");
}
sb.append(temp);
}
return sb.toString();
}
// 16进制转换为byte数组
public static byte[] hex2byte(String hexStr) {
byte[] bts = new byte[hexStr.length() / 2];
for (int i = 0, j = 0; j < bts.length; j++) {
bts[j] = (byte) Integer.parseInt(hexStr.substring(i, i + 2), 16);
i += 2;
}
return bts;
}
}
分享到:
相关推荐
PB字符串加密、解密函数,非常好用。PB字符串加密、解密函数,非常好用。
全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、...
java代码混淆器,可以混淆函数变量、类、方法名以实现代码加密,java jar 混淆 工具 反编译
java中的md5加密函数,已经封装成类和函数了,非常好用。
Java版标准3DES加密/解密方法,加密函数desedeEncoder(String paramString1, String key) 解密函数desedeDecoder(String dest, String key)
JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass ...
该java源代码将建行互联网银企被扫支付接口java版加密及验签Demo 封装成jar包,方便nodejs调用。 1.将建行Java版加密Demo打包成jar包:CCBParam.jar。并将jar包放到服务器的相应文件夹下。 2.根据订单号、金额、付款...
java中常用的工具类,用于MD5的加密,里面还有切割了MD5加密的长度,有DES加密与解密,并且配有main函数可测试,可以根据自己的实际情况使用main函数测试使用
NULL 博文链接:https://superlxw1234.iteye.com/blog/1654609
全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非...
主要使用单向散列函数算法,可用于检验消息的完整性,和通过散列密码直接以文本形式保存等,目前广泛使用的算法有MD4、MD5、SHA-1,jdk1.5对上面都提供了支持,在java中进行消息摘要很简单, java.security....
RSA加密算法,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息...本资源是通过Android、java实现的RSA加密的例子,可供大家参考学习。
纯JAVA的MD5加密,利用MD5单向函数产生密钥,方便测试
加密算法包括5个函数:初始置换(IP);复杂函数fk,它包含有置换和代换运算,并且依赖于输入的密钥;用以转换数据两个部分的简单置换函数(SW);再一次运用函数fk;最后的一个置换函数是IP的逆。解密过程是加密的...
基于单向陷门函数的加密
java、Android、javaScript(可以改成vue)、ios AES加密通用,可在服务端加密,客户端解密,也可在客户端加密,服务端解密;由于csdn会自动把积分改到50,可以发邮件到1622007541@qq.com 免费送
主要的两个函数分别为EncryptZipFile和DecryptZipFile函数。 /** * 生成带密码的ZIP压缩文件 * @param zipDir 待压缩文件路径 * @param EncryptZipFile 生成压缩文件得存储路径 * @param password 压缩密码 * @...
Java中常用的加密方法(JDK),对于一些不会使用加密方法的童鞋来说,本文档可能对你有一些启发哦。
NULL 博文链接:https://yuur369.iteye.com/blog/1191386