Java DES算法 加密 解密
程序员文章站
2024-03-13 22:56:16
...
加密分两种
1 单向加密(其实只是摘要计算的一种形式)不能通过算法把密文转化为明文,也有人不认为是一种加密
2 双向加密 (对称加密,非对称加密)可以通过算法将密文转化为明文
3 对称加密:采用单钥密码系统的加密方法,同一个**可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单**加密。
如下方法为双向加密的对称加密
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
/**
* Created by vigorous on 17/7/25.
* DES算法 加密
*/
public class SecretUtilTools {
public static void main(String[] args) throws Exception {
String clearText ="aaaaaa";
String key = "aeda17fa60187851b74f9928664dd08b333";
System.out.println("明文:" + clearText + "\n**:" + key);
String encryptText = encryptForDES(clearText, key);
System.out.println("加密后:" + encryptText);
String decryptText = decryptForDES(encryptText, key);
System.out.println("解密后:"+decryptText);
System.out.println(decryptText.trim().equals("123456"));
}
public static String encryptForDES(String souce, String key) throws InvalidKeyException,
NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key.getBytes("UTF-8"));
// 创建一个密匙工厂,然后用它把DESKeySpec转换成 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key1 = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, key1, sr);
// 现在,获取数据并加密
byte encryptedData[] = cipher.doFinal(souce.getBytes("UTF-8"));
// 通过BASE64位编码成字符创形式
String base64Str = new BASE64Encoder().encode(encryptedData);
return base64Str;
}
public static String decryptForDES(String souce, String key) throws InvalidKeyException,
NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, IOException,
IllegalBlockSizeException, BadPaddingException {
// DES算法要求有一个可信任的随机数源
SecureRandom sr = new SecureRandom();
// 从原始密匙数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec(key.getBytes());
// 创建一个密匙工厂,然后用它把DESKeySpec转换成 一个SecretKey对象
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key1 = keyFactory.generateSecret(dks);
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
// 用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE, key1, sr);
// 将加密报文用BASE64算法转化为字节数组
byte[] encryptedData = new BASE64Decoder().decodeBuffer(souce);
// 用DES算法解密报文
byte decryptedData[] = cipher.doFinal(encryptedData);
return new String(decryptedData,"UTF-8");
}
}
上一篇: 在阿里云服务器上安装配置node和npm
下一篇: asp.net中的DES加密解密