首先感谢博主开园精神,此博客是个人结合博主博文来进行一次个人的总结,加深学习印象。博主已经总结的非常的不错,大家可以参考博主原文博主博客地址
资料参考:
博主源码下载
百度百科
Java中有对称加密和非对称加密。
对称加密算法在加密和解密时使用的是同一个秘钥;而非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥),要么公钥加密私钥加密,要么私钥加密公钥揭秘。
下面来学习AES(对称加密)和RAS(非对称加密)
AES(高级加密标准)
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
RAS
之所以叫 RSA算法,是因为算法的三位发明者RSA是目前最有影响力的公钥加密算法
下面提出demo,具体讲解大家参考博主原文。
客户端代码:
package base64;
public class Client {
public static void main(String[] args){
// rsaTest();
// aesTest();
rse_aesTest();
}
/**
* 模拟RSA公钥加密
* 生成的公钥就是解密需要获取的参数
*/
private static void rsaTest(){
try {
String encryptText=RSAUtils.encryptByPublicKey("Beyond黄家驹");
System.out.println("公钥:"+encryptText);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 模拟AES加密
* 解密需要key和encryptText
*/
private static void aesTest(){
//明文
String content="AES加密算法";
//密钥
String key=AESUtils.generateKey();
//密文
String encryptText=AESUtils.encryptData(key,content);
System.out.println("key:"+key);
System.out.println("密钥:"+encryptText);
}
/**
* RSA和AES结合使用
*/
private static void rse_aesTest(){
String text="我是要加密的信息";
//使用AES对信息加密
String key=AESUtils.generateKey();
String encryptText=AESUtils.encryptData(key,text);
//使用RSA对AES的密钥加密
try {
String doubleKey=RSAUtils.encryptByPublicKey(key);
String doubleencryptText=RSAUtils.encryptByPublicKey(encryptText);
System.out.println("要传到服务端的密文:"+doubleencryptText);
System.out.println("要传到服务端的密钥:"+doubleKey);
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务端代码:
package base64;
public class Server {
public static void main(String[] args) {
// rsaTest();
// aesTest();
rsa_aesTest();
}
/**
* 解密需要的参数是客户端加密的公钥
*/
private static void rsaTest() {
String encryptText = "QclhVvuJJJTd/2KVotzKlTYJEDZh1x1w5KThxyttQZZVGaapyHyEpEprkjHwBlb9xpfHefTIqPscMDXlkuO+yyi09Na0PjLBMl7a8iyVM8MLMedzeU+dgSmAi629u73ZnrOBvs1Oq" +
"UJswh2P9kqysKSN7MXL2t56KUn93iwY7I0=";
try {
String text = RSAUtils.decryptByPrivateKey(encryptText);
System.out.println("明文:" + text);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void aesTest() {
/**
* 每一个key对应一个encryptText,只要key相同那么每一个文本生成的encryptText都是唯一的
*/
String encryptText = "r2aEHW20cXZ9+NGNklHDwQ==";
String key="8f9046aac19c45d0";
try {
String text = AESUtils.decryptData(key,encryptText);
System.out.println("明文:" + text);
} catch (Exception e) {e.printStackTrace();
}
}
private static void rsa_aesTest(){
//客户端发来的密文
String doubleEnCryptText="UUAYnThYdXR58mJU9wV9crWf5vmODCDVUF0iu8CmM0Q2etKABgJfnZg1gCqV1bP5kv5IEV33TEgNM3CuoF5Ick+VI02wwJITioAfWK5cB6GB7W8SLvwZCKfRyxa" +
"cLLKbgUtCB2AZA8BblOqZbkc8E+tY9QpausMePtzOoX4gs3w=";
//客户端发来的密钥
String doubleKey="LY8PY7htpWM5W2XtU58sQyE84qur1JVpOJ0zO2++Y5LSj41mrwv9JUA5611kIvXuWTDdkOXukdk1b8fbZWfmwdmlCEAOvAJ2lmo7Hwb7rfEILSzXkXnHxlxWuCkXsgZOqnK2eGVs" +
"vFTEPqzci77vHCMyTXoGLFTPNV09AyqQgyo=";
try {
//RSA解密
String key=RSAUtils.decryptByPrivateKey(doubleKey);
String encrtptText=RSAUtils.decryptByPrivateKey(doubleEnCryptText);
//AES解密
String text=AESUtils.decryptData(key,encrtptText);
//解密完成的明文
System.out.println(