Python での RSA 暗号化
この記事では、RSA
モジュールを使用して Python でデータを暗号化および復号化するさまざまな方法について説明します。
非対称暗号化方式では、2 人の間の安全な会話のために、鍵のペア(公開鍵と秘密鍵)を使用します。非対称暗号化または公開鍵暗号化の利点は、メッセージが改ざんされておらず、本物であることを保証する方法も提供することです。
RSA
モジュールを使用して、Python で非対称暗号化を次のように使用できます。
Python でプレーン暗号化を使用したの RSA 暗号化
Python の RSA
モジュールを使用して非対称暗号化を実行するには、プレーン RSA 暗号化と、暗号化パディングによるより適切で安全な方法の 2つの方法があります。
プレーン RSA 暗号化では、キーペアを生成し、公開キーを使用してデータを暗号化できます。_RSAobj.encrypt()
メソッドを使用してデータを暗号化し、次に _RSAobj.decrypt()
メソッドを使用して暗号化されたメッセージを復号化できます。
_RSAobj.encrypt()
メソッドと _RSAobj.decrypt()
メソッドはどちらも、入力としてバイト文字列または long を受け取り、入力に対してプレーン RSA 暗号化と復号化をそれぞれ実行します。
以下のサンプルコードは、Python でプレーン RSA 暗号化を使用してデータを暗号化および復号化する方法を示しています。
import Crypto
from Crypto.PublicKey import RSA
import ast
keyPair = RSA.generate(1024)
pubKey = keyPair.publickey()
encryptedMsg = pubKey.encrypt(b"This is my secret msg", 32)
decryptedMsg = keyPair.decrypt(ast.literal_eval(str(encryptedMsg)))
print("Decrypted message:", decryptedMsg)
Crypto
モジュールのインポート中にエラーが発生した場合は、pip install pycrypto
コマンドを使用してインストールできます。Python で暗号パディングを使用したの RSA 暗号化
Python の PKCS1_OAEP
モジュールを使用して、PKCS#1OAEP 暗号化と復号化を実行できます。OAEP は、RSA によって公開されている Optimal Asymmetric Encryption Padding スキームであり、プレーンでプリミティブな RSA 暗号化よりも安全です。
OAEP スキームを実行するには、最初に PKCS1OAEP_Cipher
オブジェクトを生成し、次に PKCS1OAEP_Cipher.encrypt()
および PKCS1OAEP_Cipher.decrypt()
メソッドを呼び出して、このスキームを使用してテキストを暗号化または復号化する必要があります。入力テキストが文字列型の場合、文字列型は有効な入力型ではないため、最初にバイト文字列に変換する必要があります。
以下のコードは、Python で PKCS1_OAEP
モジュールを使用した OAEP 暗号化を示しています。
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
key = RSA.generate(2048)
privateKey = key.exportKey("PEM")
publicKey = key.publickey().exportKey("PEM")
message = "this is a top secret message!"
message = str.encode(message)
RSApublicKey = RSA.importKey(publicKey)
OAEP_cipher = PKCS1_OAEP.new(RSApublicKey)
encryptedMsg = OAEP_cipher.encrypt(message)
print("Encrypted text:", encryptedMsg)
RSAprivateKey = RSA.importKey(privateKey)
OAEP_cipher = PKCS1_OAEP.new(RSAprivateKey)
decryptedMsg = OAEP_cipher.decrypt(encryptedMsg)
print("The original text:", decryptedMsg)
Crypto
モジュールのインポート中にエラーが発生した場合は、pip install pycrypto
コマンドを使用してインストールできます。