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格式,公钥加密、私钥解密
- 加密和解密需使用对应的密钥
- 请妥善保管私钥,密钥泄露将导致数据被破解