RSA演算法起源:
RSA演算法是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年共同提出的。它是一種非對稱加密演算法,基於兩個大素數的乘積難以分解的數論問題。RSA演算法包括公鑰和私鑰,用於加密和解密資料,實現了安全的通訊和資料傳輸。
首頁 | 一個覆蓋廣泛主題工具的高效線上平臺(amd794.com)
https://amd794.com/
RSA演算法原理:
- 選擇兩個大素數p和q,並計算它們的乘積n。
- 計算尤拉函式φ(n) = (p-1)(q-1)。
- 選擇一個公鑰e,滿足1 < e < φ(n),且e與φ(n)互質。
- 計算私鑰d,使得(e*d) mod φ(n) = 1。
- 加密訊息m:c = m^e mod n。
- 解密密文c:m = c^d mod n。
RSA演算法優缺點:
-
優點:
- 非對稱加密,安全性高。
- 可用於數字簽名、金鑰交換等。
-
缺點:
- 加密解密速度較慢。
- 需要大素數,金鑰長度較長。
RSA演算法與其他演算法對比:
- 與對稱加密演算法(如AES)相比,RSA更適用於金鑰交換和數字簽名,但速度較慢。
- 與橢圓曲線加密(ECC)相比,RSA在安全性和應用廣泛性方面有優勢。
Python示例:
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(key)
message = b"Hello, RSA!"
ciphertext = cipher.encrypt(message)
print("Encrypted:", ciphertext)
decrypt_cipher = PKCS1_OAEP.new(key)
decrypted_message = decrypt_cipher.decrypt(ciphertext)
print("Decrypted:", decrypted_message.decode())
JavaScript示例:
javascript
const forge = require('node-forge');
const keypair = forge.pki.rsa.generateKeyPair({ bits: 2048 });
const publicKey = forge.pki.publicKeyToPem(keypair.publicKey);
const privateKey = forge.pki.privateKeyToPem(keypair.privateKey);
const cipher = forge.pki.rsa.createEncryptionCipher(keypair.publicKey);
cipher.start();
cipher.update(forge.util.createBuffer('Hello, RSA!'));
cipher.finish();
const encrypted = cipher.output.getBytes();
console.log("Encrypted:", encrypted);
const decipher = forge.pki.rsa.createDecryptionCipher(keypair.privateKey);
decipher.start();
decipher.update(forge.util.createBuffer(encrypted));
decipher.finish();
const decrypted = decipher.output.toString();
console.log("Decrypted:", decrypted);
文章總結:
RSA演算法作為一種重要的非對稱加密演算法,為資訊保安領域做出了巨大貢獻。透過數學原理和公私鑰體系,RSA實現了安全的資料傳輸和通訊。儘管存在一些缺點,但其優勢在於安全性高、可靠性強。在當今資訊時代,RSA演算法仍然是保護資料安全的重要工具之一,不可或缺。