Python での RSA 暗号化

Muhammad Waiz Khan 2023年1月30日
  1. Python でプレーン暗号化を使用したの RSA 暗号化
  2. Python で暗号パディングを使用したの RSA 暗号化
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 コマンドを使用してインストールできます。

関連記事 - Python Encryption