本文目录一览:
java加密解密代码
package com.cube.limail.util;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
/**
* 加密解密类
*/
public class Eryptogram {
private static String Algorithm = "DES";
private String key = "CB7A92E3D3491964";
//定义 加密算法,可用 DES,DESede,Blowfish
static boolean debug = false;
/**
* 构造子注解.
*/
public Eryptogram() {
}
/**
* 生成密钥
* @return byte[] 返回生成的密钥
* @throws Exception 扔出异常.
*/
public static byte[] getSecretKey() throws Exception {
KeyGenerator keygen = KeyGenerator.getInstance(Algorithm);
SecretKey deskey = keygen.generateKey();
System.out.println("生成密钥:" + bytesToHexString(deskey.getEncoded()));
if (debug) System.out.println("生成密钥:" + bytesToHexString(deskey.getEncoded()));
return deskey.getEncoded();
}
/**
* 将指定的数据根据提供的密钥进行加密
* @param input 需要加密的数据
* @param key 密钥
* @return byte[] 加密后的数据
* @throws Exception
*/
public static byte[] encryptData(byte[] input, byte[] key) throws Exception {
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, Algorithm);
if (debug) {
System.out.println("加密前的二进串:" + byte2hex(input));
System.out.println("加密前的字符串:" + new String(input));
}
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.ENCRYPT_MODE, deskey);
byte[] cipherByte = c1.doFinal(input);
if (debug) System.out.println("加密后的二进串:" + byte2hex(cipherByte));
return cipherByte;
}
/**
* 将给定的已加密的数据通过指定的密钥进行解密
* @param input 待解密的数据
* @param key 密钥
* @return byte[] 解密后的数据
* @throws Exception
*/
public static byte[] decryptData(byte[] input, byte[] key) throws Exception {
SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, Algorithm);
if (debug) System.out.println("解密前的信息:" + byte2hex(input));
Cipher c1 = Cipher.getInstance(Algorithm);
c1.init(Cipher.DECRYPT_MODE, deskey);
byte[] clearByte = c1.doFinal(input);
if (debug) {
System.out.println("解密后的二进串:" + byte2hex(clearByte));
System.out.println("解密后的字符串:" + (new String(clearByte)));
}
return clearByte;
}
/**
* 字节码转换成16进制字符串
* @param byte[] b 输入要转换的字节码
* @return String 返回转换后的16进制字符串
*/
public static String byte2hex(byte[] b) {
String hs = "";
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1) hs = hs + "0" + stmp;
else hs = hs + stmp;
if (n < b.length - 1) hs = hs + ":";
}
return hs.toUpperCase();
}
/**
* 字符串转成字节数组.
* @param hex 要转化的字符串.
* @return byte[] 返回转化后的字符串.
*/
public static byte[] hexStringToByte(String hex) {
int len = (hex.length() / 2);
byte[] result = new byte[len];
char[] achar = hex.toCharArray();
for (int i = 0; i < len; i++) {
int pos = i * 2;
result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
}
return result;
}
private static byte toByte(char c) {
byte b = (byte) "0123456789ABCDEF".indexOf(c);
return b;
}
/**
* 字节数组转成字符串.
* @param String 要转化的字符串.
* @return 返回转化后的字节数组.
*/
public static final String bytesToHexString(byte[] bArray) {
StringBuffer sb = new StringBuffer(bArray.length);
String sTemp;
for (int i = 0; i < bArray.length; i++) {
sTemp = Integer.toHexString(0xFF & bArray[i]);
if (sTemp.length() < 2)
sb.append(0);
sb.append(sTemp.toUpperCase());
}
return sb.toString();
}
/**
* 从数据库中获取密钥.
* @param deptid 企业id.
* @return 要返回的字节数组.
* @throws Exception 可能抛出的异常.
*/
public static byte[] getSecretKey(long deptid) throws Exception {
byte[] key = null;
String value = null;
//CommDao dao=new CommDao();
// List list=dao.getRecordList("from Key k where k.deptid="+deptid);
//if(list.size()>0){
//value=((com.csc.sale.bean.Key)list.get(0)).getKey();
value = "CB7A92E3D3491964";
key = hexStringToByte(value);
//}
if (debug)
System.out.println("密钥:" + value);
return key;
}
public String encryptData2(String data) {
String en = null;
try {
byte[] key = hexStringToByte(this.key);
en = bytesToHexString(encryptData(data.getBytes(), key));
} catch (Exception e) {
e.printStackTrace();
}
return en;
}
public String decryptData2(String data) {
String de = null;
try {
byte[] key = hexStringToByte(this.key);
de = new String(decryptData(hexStringToByte(data), key));
} catch (Exception e) {
e.printStackTrace();
}
return de;
}
}
加密使用:
byte[] key = Eryptogram.getSecretKey(deptid); // 获得钥匙(字节数组)
byte[] tmp = Eryptogram.encryptData(password.getBytes(), key); // 传入密码和钥匙,获得加密后的字节数组的密码
password = Eryptogram.bytesToHexString(tmp); // 将字节数组转化为字符串,获得加密后的字符串密码
解密与之差不多。
JAVA如何对URL进行加密和解密啊
URLDecoder 和 URLEncoder 应该是不行的,程序员轻易的就能解码修改参数后重新编码。 比较合适的就是 RSA 加密了,只要两个服务器共用一个密钥,一个加密,另一个收到后再用密钥解密就行。因为是整数加密,所以在没有证书的情况下基本无法解密的。 DES 加密也是不错的选择,比 RSA 简单。 如果有能力也可以自己写一个简单的加密方法。
Java 加密解密的方法都有哪些
加密解密并非 Java 才有的,所有编程语言都有加密和解密。 目前的加密解密主要可分为以下 2 大类:
- 对称秘钥加密:如 DES 算法,3DES 算法,TDEA 算法,Blowfish 算法,RC5 算法,IDEA 算法等。其主要特点是加密方和解密方都有同一个密码,加密方和解密方可以使用秘钥任意加密解密。
- 非对称密码加密:这种加密方式加密方仅有加密秘钥,对加密后的密文无法反向解密,解密方仅有解密秘钥,无法对明文进行加密。 另外还有一些摘要算法,比如 MD5 和 HASH 此类算法不可逆,但经常用来作为确认字段或者对一些重要匹配信息签名防止明文内容被修改。