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