下面是详细讲解“Java 实现RSA非对称加密算法”的完整攻略:
RSA非对称加密算法:
RSA算法是一种非对称加密算法,由三位数学家,Rivest,Irving,Adi Shamir和Leonard Adleman发明,取名来自他们三人的名字缩写。RSA算法是一种常用的加密算法,它可以用于数字签名,密钥协商,数据加密等等。
RSA的原理:
RSA非对称加密算法的原理是,公钥可以自由的发布,任何人都可以用该公钥加密信息。但是,只有私钥的持有者才能解密信息。公钥和私钥是一对,互相加密,互相解密。加密使用公钥,解密使用私钥。
RSA算法的优点:
- 安全可靠:在现有计算机技术下,已经无法攻击和破解。
- 传输效率低:由于公钥的长度较长,所以加密和解密的效率较低。
- 加密解密不可逆性好:RSA算法的密钥是一对,所以无法通过加密消息获得私钥,从而保证了信息的安全性。
RSA算法的实现:
1.生成一对公私钥:
RSA密钥生成就是随机两个大素数,p和q,然后计算出n=pq,φ(n)=(p-1)(q-1),然后任意选择一个小于φ(n)的整数e与φ(n)互质,设它的逆为d,那么e、n就组成了公钥,d、n就组成了私钥。
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
public class RSADemo {
public static void main(String[] args) throws NoSuchAlgorithmException {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair kp = kpg.genKeyPair();
byte[] publicKey = kp.getPublic().getEncoded();
String publicKeyString = new BASE64Encoder().encode(publicKey);
System.out.println("public key:" + publicKeyString);
byte[] privateKey = kp.getPrivate().getEncoded();
String privateKeyString = new BASE64Encoder().encode(privateKey);
System.out.println("private key:" + privateKeyString);
}
}
2.加密:
通过公钥进行加密。
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
class RSADemo {
static String plainText = "This is the plain text.";
public static void main(String[] args) throws NoSuchAlgorithmException, Exception {
// Generate public and private keys using RSA
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();
Cipher cipher = Cipher.getInstance("RSA");
// Encrypt plain text using public key
cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
byte[] encryptedData = cipher.doFinal(plainText.getBytes());
System.out.println("Encrypted data: " + new String(encryptedData));
}
}
3.解密:
通过私钥进行解密。
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
class RSADemo {
static String plainText = "This is the plain text.";
public static void main(String[] args) throws NoSuchAlgorithmException, Exception {
// Generate public and private keys using RSA
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();
Cipher cipher = Cipher.getInstance("RSA");
// Encrypt plain text using public key
cipher.init(Cipher.ENCRYPT_MODE, kp.getPublic());
byte[] encryptedData = cipher.doFinal(plainText.getBytes());
System.out.println("Encrypted data: " + new String(encryptedData));
// Decrypt encrypted data using private key
cipher.init(Cipher.DECRYPT_MODE, kp.getPrivate());
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("Decrypted data: " + new String(decryptedData));
}
}
以上是Java实现RSA非对称加密算法的完整攻略,示例代码也包含了公钥和私钥的生成,加密和解密的过程,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 实现RSA非对称加密算法 - Python技术站