JAVA使用几种对称加密算法
2023-04-18 14:53:20 时间
今天到慕课网看了几集视频,对加密的操作过程还是不知道为什么有这么多步骤以及每个步骤是做什么;但是照着出来了,以后用到的时候翻得看看,直接拿上用了。
AES:
package com.fengyunhe;
import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
/**
* 功能:
* 作者: yangyan
* 时间: 2015/3/22 .
*/
public class AES {
private static String src = "i love you";
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
// 生成KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encoded = secretKey.getEncoded();
// 转换key
Key key = new SecretKeySpec(encoded, "AES");
// 加密
Cipher cipher
= Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] bytes = cipher.doFinal(src.getBytes());
System.out.println("jdk AES encrypt:" + HexBin.encode(bytes));
// 解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] bytes1 = cipher.doFinal(bytes);
System.out.println("jds AES decrypt:" + new String(bytes1));
}
}
DES:
package com.fengyunhe;
import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
/**
* 功能: DES 加解密
* 作者: yangyan
* 时间: 2015/3/21 .
*/
public class Des {
private static String src = "i love you";
public static void main(String[] args) {
try {
// 生成KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
keyGenerator.init(56);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encoded = secretKey.getEncoded();
// KEY转换
DESKeySpec desKeySpec = new DESKeySpec(encoded);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");
Key convertKey = factory.generateSecret(desKeySpec);
// 加密
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertKey);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("jdk des encrypt:" + HexBin.encode(result));
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertKey);
result = cipher.doFinal(result);
System.out.println("jdk des decrypt:" + new String(result));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
}
DESTriple:
package com.fengyunhe;
import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
import javax.crypto.*;
import javax.crypto.spec.DESedeKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
/**
* 功能:
* 作者: yangyan
* 时间: 2015/3/22 .
*/
public class Des3 {
private static String src = "i love you";
public static void main(String[] args) {
try {
// 生成KEY
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede");
keyGenerator.init(168);
SecretKey secretKey = keyGenerator.generateKey();
byte[] encoded = secretKey.getEncoded();
// KEY转换
DESedeKeySpec desKeySpec = new DESedeKeySpec(encoded);
SecretKeyFactory factory = SecretKeyFactory.getInstance("DESede");
Key convertKey = factory.generateSecret(desKeySpec);
// 加密
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, convertKey);
byte[] result = cipher.doFinal(src.getBytes());
System.out.println("jdk 3des encrypt:" + HexBin.encode(result));
// 解密
cipher.init(Cipher.DECRYPT_MODE, convertKey);
result = cipher.doFinal(result);
System.out.println("jdk 3des decrypt:" + new String(result));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
}
}
PBE:
package com.fengyunhe;
import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;
import javax.crypto.*;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.InvalidKeySpecException;
/**
* 功能:
* 作者: yangyan
* 时间: 2015/3/22 .
*/
public class PBE {
private static String src = "i love you";
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, NoSuchPaddingException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
// 初始化salt
SecureRandom random = new SecureRandom();
byte[] salt = random.generateSeed(8);
// 口令于秘钥
String password = "yangyan";
PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5andDES");
SecretKey secretKey = factory.generateSecret(pbeKeySpec);
// 加密
PBEParameterSpec pbeParameterSpec = new PBEParameterSpec(salt, 100);
Cipher cipher = Cipher.getInstance("PBEWithMD5andDES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, pbeParameterSpec);
byte[] bytes = cipher.doFinal(src.getBytes());
System.out.println("encrypt by PBE: " + HexBin.encode(bytes));
// 解密
cipher.init(Cipher.DECRYPT_MODE, secretKey, pbeParameterSpec);
byte[] bytes1 = cipher.doFinal(bytes);
System.out.println("decrypt by PBE:" + new String(bytes1));
}
}
相关文章
- 一次单元测试优化的过程总结
- Java 实现100 万+并发,搞懂这些,骚操作!
- Java性能优化的七个方向
- 不懂优雅停机,搞挂了线上服务该咋办?
- 如何在 Ubuntu Linux 中正确地设置 JAVA_HOME 变量
- 如何在 Linux 上手动安装 Java
- 如何在 Ubuntu 中运行 Java 程序
- HarmonyOS使用Java获取位置信息
- 如何在 Fedora Linux 上安装 Java
- HarmonyOS基于Java开发的服务卡片
- 《漫谈 MQ》设计 MQ 的 3 个难点
- Java开发日常
- 手把手教你提交Jar包到Maven公共仓库 | 萌新写开源02
- 一次完整的JVM堆外内存泄漏故障排查记录
- elasticsearch之自定义Java代码的安全策略管理
- Java中的受检异常
- 并发编程之对象的发布和逸出
- 并发编程之内存可见性
- 并发编程之线程安全性
- 并发编程的几种形式