对称、非对称加密算法简介
2018-02-08 10:58
204 查看
一、对称加密算法:
使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
应用:一般应用登录 传输帐号密码使用对称加密算法,如DES(只有56位的密钥),AES(提供128位密钥)等加密。密钥可能是固定写死的。
二、非对称加密算法
使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明 文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。如RSA非对称加密算法。
特点:加解密速度慢
应用:
1、好点的应用系统。会使用非对称加密算法获取密钥。如下:
非对称加密:客户端发送请求到服务器,服务器生成公钥私钥, 公钥发送给用户,用户生成密钥并使用公钥对齐加密发送到服务器段。完成密钥的交换
对称加密:后续使用密钥进行加密的数据进行业务沟通\
2、
如果提供SDK(jar包形式),SDK需要发送服务器信息,最好使用非对称加密方式,因为如果使用对称加密方式,密钥在jar包中写死,等于对外公开了该密钥
3、
更为安全的,如PC上使用SSL协议(包括密钥或许,身份认证等)来保证安全。
可参考SSL协议部分,https
RSA参考: http://blog.csdn.net/qq_18870023/article/details/52596808 http://blog.csdn.net/centralperk/article/details/8558678 http://blog.csdn.net/axi295309066/article/details/52494640 https://www.cnblogs.com/only-jlk/p/5960900.html
RSA代码参考:
public class RSATest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
KeyPair keyPair=genKeyPair(1024);
//获取公钥,并以base64格式打印出来
PublicKey publicKey=keyPair.getPublic();
// publicKey = getPublicKey(pub1);
System.out.println("公钥:"+new String(Base64.getEncoder().encode(publicKey.getEncoded())));
//获取私钥,并以base64格式打印出来
PrivateKey privateKey=keyPair.getPrivate();
// privateKey = getPrivateKey(pri1);
System.out.println("私钥:"+new String(Base64.getEncoder().encode(privateKey.getEncoded())));
//公钥加密
byte[] encryptedBytes=encrypt("12345".getBytes(), publicKey);
System.out.println("加密后:"+new String(encryptedBytes));
//私钥解密
byte[] decryptedBytes=decrypt(encryptedBytes, privateKey);
System.out.println("解密后:"+new String(decryptedBytes));
}
//生成密钥对
public static KeyPair genKeyPair(int keyL
4000
ength) throws Exception{
KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
return keyPairGenerator.generateKeyPair();
}
//公钥加密
public static byte[] encrypt(byte[] content, PublicKey publicKey) throws Exception{
Cipher cipher=Cipher.getInstance("RSA");//java默认"RSA"="RSA/ECB/PKCS1Padding"
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(content);
}
//私钥解密
public static byte[] decrypt(byte[] content, PrivateKey privateKey) throws Exception{
Cipher cipher=Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(content);
}
//将base64编码后的公钥字符串转成PublicKey实例
public static PublicKey getPublicKey(String publicKey) throws Exception{
byte[ ] keyBytes=Base64.getDecoder().decode(publicKey.getBytes());
X509EncodedKeySpec keySpec=new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
//将base64编码后的私钥字符串转成PrivateKey实例
public static PrivateKey getPrivateKey(String privateKey) throws Exception{
byte[ ] keyBytes=Base64.getDecoder().decode(privateKey.getBytes());
PKCS8EncodedKeySpec keySpec=new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(keySpec);
}
}
使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
应用:一般应用登录 传输帐号密码使用对称加密算法,如DES(只有56位的密钥),AES(提供128位密钥)等加密。密钥可能是固定写死的。
二、非对称加密算法
使用两把完全不同但又是完全匹配的一对钥匙—公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明 文的加密和解密过程。加密明文时采用公钥加密,解密密文时使用私钥才能完成,而且发信方(加密者)知道收信方的公钥,只有收信方(解密者)才是唯一知道自己私钥的人。如RSA非对称加密算法。
特点:加解密速度慢
应用:
1、好点的应用系统。会使用非对称加密算法获取密钥。如下:
非对称加密:客户端发送请求到服务器,服务器生成公钥私钥, 公钥发送给用户,用户生成密钥并使用公钥对齐加密发送到服务器段。完成密钥的交换
对称加密:后续使用密钥进行加密的数据进行业务沟通\
2、
如果提供SDK(jar包形式),SDK需要发送服务器信息,最好使用非对称加密方式,因为如果使用对称加密方式,密钥在jar包中写死,等于对外公开了该密钥
3、
更为安全的,如PC上使用SSL协议(包括密钥或许,身份认证等)来保证安全。
可参考SSL协议部分,https
RSA参考: http://blog.csdn.net/qq_18870023/article/details/52596808 http://blog.csdn.net/centralperk/article/details/8558678 http://blog.csdn.net/axi295309066/article/details/52494640 https://www.cnblogs.com/only-jlk/p/5960900.html
RSA代码参考:
public class RSATest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
KeyPair keyPair=genKeyPair(1024);
//获取公钥,并以base64格式打印出来
PublicKey publicKey=keyPair.getPublic();
// publicKey = getPublicKey(pub1);
System.out.println("公钥:"+new String(Base64.getEncoder().encode(publicKey.getEncoded())));
//获取私钥,并以base64格式打印出来
PrivateKey privateKey=keyPair.getPrivate();
// privateKey = getPrivateKey(pri1);
System.out.println("私钥:"+new String(Base64.getEncoder().encode(privateKey.getEncoded())));
//公钥加密
byte[] encryptedBytes=encrypt("12345".getBytes(), publicKey);
System.out.println("加密后:"+new String(encryptedBytes));
//私钥解密
byte[] decryptedBytes=decrypt(encryptedBytes, privateKey);
System.out.println("解密后:"+new String(decryptedBytes));
}
//生成密钥对
public static KeyPair genKeyPair(int keyL
4000
ength) throws Exception{
KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
return keyPairGenerator.generateKeyPair();
}
//公钥加密
public static byte[] encrypt(byte[] content, PublicKey publicKey) throws Exception{
Cipher cipher=Cipher.getInstance("RSA");//java默认"RSA"="RSA/ECB/PKCS1Padding"
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
return cipher.doFinal(content);
}
//私钥解密
public static byte[] decrypt(byte[] content, PrivateKey privateKey) throws Exception{
Cipher cipher=Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
return cipher.doFinal(content);
}
//将base64编码后的公钥字符串转成PublicKey实例
public static PublicKey getPublicKey(String publicKey) throws Exception{
byte[ ] keyBytes=Base64.getDecoder().decode(publicKey.getBytes());
X509EncodedKeySpec keySpec=new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
//将base64编码后的私钥字符串转成PrivateKey实例
public static PrivateKey getPrivateKey(String privateKey) throws Exception{
byte[ ] keyBytes=Base64.getDecoder().decode(privateKey.getBytes());
PKCS8EncodedKeySpec keySpec=new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory=KeyFactory.getInstance("RSA");
return keyFactory.generatePrivate(keySpec);
}
}
相关文章推荐
- [Java_算法]Java加密技术--单向加密算法和双向对称/非对称算法
- 对称 非对称 加密算法在网络通信中的应用
- "对称/非对称密钥"加密算法
- 通过代理截取并修改非对称密钥加密信息 加密、解密算法总的来说可以分称对称密钥加密以及非对称密钥加密算法。 对称密钥加密算法要求加密和解密都用同一把密钥。这可能是对称密码体制的主要弱点(为了让对方能够
- "对称/非对称密钥"加密算法
- SSH加密原理、RSA非对称加密算法学习与理解
- 【上】安全HTTPS-全面详解对称加密,非对称加密,数字签名,数字证书和HTTPS
- 对称交换和非对称交换
- 常用的加密算法简介
- 非对称加密算法-DH算法
- 非对称加密算法的误解(RSA等算法)
- Android加密算法之对称加密AES
- 加密算法简介
- 对称与非对称和可逆不可逆加密算法总结
- 第十三章 三种非对称加密算法总结
- java 加解密实例(对称——非对称)
- RSA非对称加密算法