Java加密方式基本的汇总

yanInsert 发布于 2016/08/10 13:15
阅读 838
收藏 9

最近老使用加密这块的内容姑分享下加密的一些基本方式,不喜勿喷,好歹才1年工作。

public class EncryptionUtil {


/**
* AES算法密钥
*/
public String secretkeyAES;


/**
* DES算法密钥
*/
public byte[] secretkey;


public EncryptionUtil() {
}


public EncryptionUtil(byte[] secretkey) {
/**
* 针对DES算法密钥进行判断。
*/
this.secretkey = secretkey;
}


/**
* 对数据采用MD5形式加密。

* @param express
*            明文
* @return 密文
* @date 2016年7月15日 上午11:43:30
*/
public String encryptionMD5(String express) {
String ciphertext = null;
if (StringUtils.isEmpty(express)) {
return ciphertext;
}
try {
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
md.update(express.getBytes());
// 获得密文
byte[] temp = md.digest();
// 把密文转换成十六进制的字符串形式
StringBuffer sb = new StringBuffer(temp.length * 2);
for (int i = 0; i < temp.length; i++) {
sb.append(Character.forDigit((temp[i] & 0xf0) >> 4, 16));
sb.append(Character.forDigit(temp[i] & 0x0f, 16));
}
ciphertext = sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}


return ciphertext;
}


/**
* 对数据采用AES加密算法。 如果采用此算法加密,需先要set进密钥

* @param express
*            明文
* @return 密钥
* @date 2016年7月15日 上午11:54:48
*/
public byte[] encryptionAES(String express) {
byte[] ciphertext = null;
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(secretkeyAES.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = express.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
ciphertext = cipher.doFinal(byteContent);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return ciphertext;
}


/**
* 对数据进行AES方式解密。

* @param ciphertext
*            密文 byte数据
* @return 明文 btye数据
* @date 2016年7月15日 下午12:00:08
*/
public byte[] decryptAES(byte[] ciphertext) {
byte[] express = null;
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(secretkeyAES.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
express = cipher.doFinal(ciphertext);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return express;
}


/**
* 对数据采用DES加密算法。

* @param express
*            明文
* @return 密文
* @date 2016年7月15日 上午11:33:07
*/
public String encryptionDES(String express) {
String ciphertext = null;
try {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
DESKeySpec deskey = new DESKeySpec(secretkey);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(deskey);
// 加密对象
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
ciphertext = new sun.misc.BASE64Encoder().encode(cipher.doFinal(express.getBytes()));
} catch (Exception e) {
throw new RuntimeException("加密错误,错误信息:", e);
}
return ciphertext;
}


/**
* 对数据进行DES方式解密。

* @param ciphertext
*            密文
* @return 明文
* @date 2016年7月15日 上午11:33:13
*/
public String decryptDES(String ciphertext) {
String express = null;
try {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
DESKeySpec deskey = new DESKeySpec(secretkey);
// 创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(deskey);
// 解密对象
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key, sr);
// 把字符串解码为字节数组,并解密
express = new String(cipher.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(ciphertext)));
} catch (Exception e) {
throw new RuntimeException("解密错误,错误信息:", e);
}
return express;
}


public String getSecretkeyAES() {
return secretkeyAES;
}


public void setSecretkeyAES(String secretkeyAES) {
this.secretkeyAES = secretkeyAES;
}


}

加载中
0
kakai
kakai
怎么发到问答求助这块了,手抖了吧,以后少撸
0
ksfzhaohui
ksfzhaohui

引用来自“BoXuan”的评论

怎么发到问答求助这块了,手抖了吧,以后少撸
yanInsert
yanInsert
醉啦
返回顶部
顶部