RSA加解密
RSA非对称加密算法,支持公钥加密、私钥解密,适合数据加密传输和安全通信
说明:
加密结果为多行,每行是一段密文。解密时直接粘贴全部内容即可自动还原明文。
RSA简介
RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,广泛用于数据加密和数字签名。RSA使用一对密钥(公钥和私钥),公钥加密、私钥解密,安全性高,适合敏感数据传输。
算法特点
- 非对称加密:加密和解密使用不同的密钥
- 支持数字签名和身份认证
- 安全性高,适合敏感数据传输
常见用途
- 数据加密传输
- 数字签名
- 证书和身份认证
- 区块链和加密货币
填充类型说明
- RSA-OAEP(推荐):更安全的填充方案,适用于新系统,防御多种攻击。
- PKCS1 v1.5:传统填充方式,兼容性好,适用于老系统,但安全性略低。
代码示例
Python:
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 生成密钥对
key = RSA.generate(2048)
private_key = key.export_key()
public_key = key.publickey().export_key()
# 加密
cipher = PKCS1_OAEP.new(RSA.import_key(public_key))
encrypted = cipher.encrypt(b'Hello, RSA!')
# 解密
cipher = PKCS1_OAEP.new(RSA.import_key(private_key))
decrypted = cipher.decrypt(encrypted)
print(decrypted.decode())
Java:
import java.security.*;
import javax.crypto.Cipher;
import java.util.Base64;
public class RSAExample {
public static void main(String[] args) throws Exception {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
PublicKey pubKey = pair.getPublic();
PrivateKey privKey = pair.getPrivate();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encrypted = cipher.doFinal("Hello, RSA!".getBytes());
cipher.init(Cipher.DECRYPT_MODE, privKey);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println(new String(decrypted));
}
}
JavaScript:
// 推荐使用 node-forge 或 JSEncrypt 等库
const forge = require('node-forge');
// 生成密钥对
var keypair = forge.pki.rsa.generateKeyPair({bits: 2048, e: 0x10001});
var publicKeyPem = forge.pki.publicKeyToPem(keypair.publicKey);
var privateKeyPem = forge.pki.privateKeyToPem(keypair.privateKey);
// 加密
var encrypted = forge.util.encode64(keypair.publicKey.encrypt('Hello, RSA!'));
// 解密
var decrypted = keypair.privateKey.decrypt(forge.util.decode64(encrypted));
console.log(decrypted);
PHP:
// 生成密钥对
$res = openssl_pkey_new(['private_key_bits' => 2048]);
openssl_pkey_export($res, $privateKey);
$publicKey = openssl_pkey_get_details($res)['key'];
// 加密
openssl_public_encrypt('Hello, RSA!', $encrypted, $publicKey);
// 解密
openssl_private_decrypt($encrypted, $decrypted, $privateKey);
echo $decrypted;
注意事项
- RSA密钥需为PEM格式,公钥加密、私钥解密
- 加密和解密需使用对应的密钥
- 请妥善保管私钥,密钥泄露将导致数据被破解