前言
和前端进行数据交互时或者和第三方商家对接时,需要对隐私数据进行加密。单向加密,对称加密,非对称加密,其对应的算法也各式各样。java提供了统一的框架来规范(java.security)安全加密这类API。下面将一一介绍
- 加密算法概念及分类
- 秘钥生成
- 摘要算法工具-MessageDigest
- 签名算法工具-Signature
- 常用加密工具类-Cipher
- Certificate-证书的保存
- KeyStore-密钥证书的实体类
- https证书加载
-
另外本人整理了20年面试题大全,包含spring、并发、数据库、Redis、分布式、dubbo、JVM、微服务等方面总结,下图是部分截图,需要的话扫码,暗号CSDN。
1 加密算法概念及分类
常用的加密算法类型有三种,如下:
- 单向加密:也就是不可逆的加密,例如MD5,SHA,HMAC
- 对称加密:也就是加密方和解密方利用同一个秘钥对数据进行加密和解密,例如DES,PBE等等
- 非对称加密:非对称加密分为公钥和秘钥,二者是非对称的,例如用私钥加密的内容需要使用公钥来解密,使用公钥加密的内容需要用私钥来解密,DSA,RSA
2 秘钥生成
对称加密密钥的生成
- KeyGenerator用于生成对称秘钥(可逆加密),或者一个密码性秘钥
- 支持算法:AES、ARCFOUR、DES、DESede、HmacMD5、HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512、RC2
-
public static final KeyGenerator getInstance(String algorithm, String provider)
-
public static final KeyGenerator getInstance(String algorithm)
-
public final void init(int keysize)
-
public final void init(int keysize, SecureRandom random)
-
public final void init(SecureRandom random)
-
public final void init(AlgorithmParameterSpec params, SecureRandom random)
-
public final SecretKey generateKey()
- 示例
-
public static void main(String[] args) throws Exception {
-
SecretKey secretKey = generatorDesKey();
-
System.out.println(secretKey);
-
}
-
public static SecretKey generatorDesKey() throws NoSuchAlgorithmException {
-
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
-
SecureRandom random = new SecureRandom();
-
random.nextBytes(new byte[128]);
-
keyGen.init(56,random);
-
SecretKey key = keyGen.generateKey();
-
return key;
-
}
-
------------输出结果------------------
-
com.sun.crypto.provider.DESKey@185c3
-
复制代码
非对称加密秘钥的生成
- KeyPairGenerator用于生成非对称加密算法的密钥对KeyPair,KeyPair会包括一个公钥和私钥
- 支持算法:DiffieHellman、DSA、RSA、RSASSA-PSS、EC
-
//KeyPairGenerator.java
-
public static KeyPairGenerator getInstance(String algorithm)
-
public static KeyPairGenerator getInstance(String algorithm, String provider)
-
public void initialize(int keysize, SecureRandom random)
-
public void initialize(AlgorithmParameterSpec params, SecureRandom random)
-
public final KeyPair genKeyPair()
-
//KeyPair.java
-
public PublicKey getPublic()
-
public PrivateKey getPrivate()
-
复制代码
- 示例
-
public static void main(String[] args) throws Exception {
-
KeyPair keyPair = generatorRsaKey();
-
System.out.println(keyPair);
-
}
-
public static KeyPair generatorRsaKey() throws Exception {
-
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
-
SecureRandom random = new SecureRandom();
-
random.nextBytes(new byte[516]);
-
keyGen.initialize(516,random);
-
KeyPair keyPair = keyGen.genKeyPair();
-
System.out.println(keyPair.getPrivate());
-
System.out.println(keyPair.getPublic());
-
return keyPair;
-
}
-
复制代码
- 输出结果
-
SunRsaSign RSA private CRT key, 516 bits</