国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
0. 効果デモ
1. 鍵ペアの生成
2. 暗號(hào)化と復(fù)號(hào)化の実裝
3. ランダムな素?cái)?shù)の生成関數(shù)
4. eucalg 関數(shù)の実裝
5 、test
1)、キーを生成
2 に保存されます)、ファイルの內(nèi)容を暗號(hào)化します
3. ファイルを暗號(hào)化します コンテンツの復(fù)號(hào)化
ホームページ バックエンド開発 Python チュートリアル Python を使用して RSA 暗號(hào)化と復(fù)號(hào)化を?qū)g裝する

Python を使用して RSA 暗號(hào)化と復(fù)號(hào)化を?qū)g裝する

Apr 14, 2023 pm 02:13 PM
python rsa 暗號(hào)化と復(fù)號(hào)化

昨日、Python を使用して RSA アルゴリズムを?qū)g裝する方法を示した英語の記事 [1] を見ました。コードのロジックは、前の記事「RSA アルゴリズムを理解する」と同じです。RSA に詳しくない友人でも読むことができます。記事「Understanding the RSA Algorithm.」は、RSA とは何か、RSA の數(shù)學(xué)的原理を説明し、簡(jiǎn)単な例を示しており、Quanzhihu で RSA を理解するのに最も簡(jiǎn)単な記事と言えます (これは読者のコメントから來ています)。

英語で提供されたコードを?qū)g行したところ、中國語を暗號(hào)化できないことが判明したため、中國語の暗號(hào)化と復(fù)號(hào)化をサポートするように暗號(hào)化と復(fù)號(hào)化の関數(shù)を修正しました。今日の記事では、Python を使用して RSA 暗號(hào)化および復(fù)號(hào)化プロセスを?qū)g裝する方法を共有し、RSA を直感的に理解できるようにします。コード內(nèi)のランダムな素?cái)?shù)生成アルゴリズムも學(xué)ぶ価値があります。

0. 効果デモ

まずは効果を見てみましょう。

原文:「モグラがいます、取引を終了します」

Python を使用して RSA 暗號(hào)化と復(fù)號(hào)化を?qū)g裝する

暗號(hào)文は全く解読できません:

Python を使用して RSA 暗號(hào)化と復(fù)號(hào)化を?qū)g裝する

復(fù)號(hào)後:

Python を使用して RSA 暗號(hào)化と復(fù)號(hào)化を?qū)g裝する

完全なコード公開アカウント「Python No. 7」は、「rsa」と返信することで取得できます。

1. 鍵ペアの生成

アイデア:

1) ランダムに 2 つの素?cái)?shù) (素?cái)?shù)) p と q を見つけます。p と q が大きいほど安全です。ここでは 1024 ビットの素?cái)?shù)を選択します:

p = genprime(1024)
q = genprime(1024)

genprime() 関數(shù)の実裝プロセスについては觸れません。

2) それらの積 n = p * q とオイラー関數(shù) lambda_n を計(jì)算します。

n = p * q
lambda_n = (p - 1) * (q - 1)

3) 整數(shù) e をランダムに選択します。條件は 1 < e < lambda_n で、e と lambda_n は互いに素です。たとえば、35537 を選択した場(chǎng)合、35537 には 16 ビットしかなく、lambda_n より小さい必要があります。 < e < lambda_n,且 e 與 lambda_n 互質(zhì)。比如選擇 35537,35537 只有 16 位,必然小于 lambda_n。

e = 35537

4) e * d を lambda_n で割った余りが 1 になるような整數(shù) d を見つけ、キー ペアを返します。

d = eucalg(e, lambda_n)[0]
if d < 0: d += lambda_n
return (d, n), (e, n)

eucalg 関數(shù)の実裝については後で説明します。

この時(shí)點(diǎn)で、キー ペア生成関數(shù)は次のとおりです:

def create_keys():
 p = genprime(1024)
 q = genprime(1024)
 n = p * q
 lambda_n = (p - 1) * (q - 1)
 e = 35537
 d = eucalg(e, lambda_n)[0]
 if d < 0: d += lambda_n
 return (d, n), (e, n)

2. 暗號(hào)化と復(fù)號(hào)化の実裝

暗號(hào)化と復(fù)號(hào)化のプロセスは同じ、公開キーです。暗號(hào)化、秘密鍵暗號(hào)化、鍵復(fù)號(hào)、その逆の秘密鍵暗號(hào)、公開鍵復(fù)號(hào)がありますが、前者を暗號(hào)化、後者を署名と呼びます。

具體的な関數(shù)の実裝は次のとおりです:

def encrypt_data(data,key):
e_data = []
for d in data:
 e = modpow(d, key[0], key[1]) 
 e_data.append(e)
return e_data

## 加密和解密的邏輯完全一樣
decrypt_data = encrypt_data

ここでは modpow 関數(shù)が使用されており、式 b^e % n = r を計(jì)算するために使用されます。

  • 暗號(hào)化プロセスの場(chǎng)合、b は平文、(n,e) は公開鍵、r は暗號(hào)文です。
  • これが復(fù)號(hào)化プロセスの場(chǎng)合、b は暗號(hào)文、(n, d) は秘密鍵、r は有名なテキストです。

modpow は次のように定義されます:

def modpow(b, e, n):
 # find length of e in bits
 tst = 1
 siz = 0
 while e >= tst:
tst <<= 1
siz += 1
 siz -= 1
 # calculate the result
 r = 1
 for i in range(siz, -1, -1):
r = (r * r) % n
if (e >> i) & 1: r = (r * b) % n
 return r

3. ランダムな素?cái)?shù)の生成関數(shù)

行列乗算とフィボナッチ數(shù)列を使用したランダムな素?cái)?shù)の生成関數(shù)アルゴリズムに対する數(shù)學(xué)の重要性を示しています。

# matrix multiplication
def sqmatrixmul(m1, m2, w, mod):
 mr = [[0 for j in range(w)] for i in range(w)]
 for i in range(w):
for j in range(w):
 for k in range(w):
mr[i][j] = (mr[i][j] + m1[i][k] * m2[k][j]) % mod
 return mr

# fibonacci calculator
def fib(x, mod):
 if x < 3: return 1
 x -= 2
 # find length of e in bits
 tst = 1
 siz = 0
 while x >= tst:
tst <<= 1
siz += 1
 siz -= 1
 # calculate the matrix
 fm = [
# function matrix
[0, 1],
[1, 1]
 ]
 rm = [
# result matrix
# (identity)
[1, 0],
[0, 1]
 ]
 for i in range(siz, -1, -1):
rm = sqmatrixmul(rm, rm, 2, mod)
if (x >> i) & 1:
 rm = sqmatrixmul(rm, fm, 2, mod)

 # second row of resulting vector is result
 return (rm[1][0] + rm[1][1]) % mod

def genprime(siz):
 while True:
num = (1 << (siz - 1)) + secrets.randbits(siz - 1) - 10;
# num must be 3 or 7 (mod 10)
num -= num % 10
num += 3 # 3 (mod 10)
# heuristic test
if modpow(2, num - 1, num) == 1 and fib(num + 1, num) == 0:
 return num
num += 5 # 7 (mod 10)
# heuristic test
if modpow(2, num - 1, num) == 1 and fib(num + 1, num) == 0:
 return num

4. eucalg 関數(shù)の実裝

関數(shù)の本質(zhì)は、次の 2 つの変數(shù)の線形方程式の解を見つけることです:

e * x - lambda_n * y =1

具體的なコード:

def eucalg(a, b):
 # make a the bigger one and b the lesser one
 swapped = False
 if a < b:
a, b = b, a
swapped = True
 # ca and cb store current a and b in form of
 # coefficients with initial a and b
 # a' = ca[0] * a + ca[1] * b
 # b' = cb[0] * a + cb[1] * b
 ca = (1, 0)
 cb = (0, 1)
 while b != 0:
# k denotes how many times number b
# can be substracted from a
k = a // b
# swap a and b so b is always the lesser one
a, b, ca, cb = b, a-b*k, cb, (ca[0]-k*cb[0], ca[1]-k*cb[1])
 if swapped:
return (ca[1], ca[0])
 else:
return ca

5 、test

test.py スクリプトの使用方法:

1)、キーを生成

python test.py make-keys rsakey

公開キーは rsakey.pub に保存され、秘密キーは rsakey.priv 中

2 に保存されます)、ファイルの內(nèi)容を暗號(hào)化します

プレーン テキスト .txt ファイルがある場(chǎng)合:

python test.py encrypt 明文.txt from rsakey to 密文.txt

は暗號(hào)文を生成します.txt

3. ファイルを暗號(hào)化します コンテンツの復(fù)號(hào)化

ファイル ciphertext.txt:

python test.py decrypt 密文.txt as rsakey to 解密后.txt

がある場(chǎng)合は、復(fù)號(hào)化された .txt

Final が生成されます。言葉

この記事では、RSA アルゴリズムの Python について説明します。簡(jiǎn)単な実裝は、RSA アルゴリズムを理解するのに役立ちます。


以上がPython を使用して RSA 暗號(hào)化と復(fù)號(hào)化を?qū)g裝するの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PythonでAPI認(rèn)証を処理する方法 PythonでAPI認(rèn)証を処理する方法 Jul 13, 2025 am 02:22 AM

API認(rèn)証を扱うための鍵は、認(rèn)証方法を正しく理解して使用することです。 1。Apikeyは、通常、リクエストヘッダーまたはURLパラメーターに配置されている最も単純な認(rèn)証方法です。 2。BasicAuthは、內(nèi)部システムに適したBase64エンコード送信にユーザー名とパスワードを使用します。 3。OAUTH2は、最初にclient_idとclient_secretを介してトークンを取得し、次にリクエストヘッダーにbearertokenを持ち込む必要があります。 4。トークンの有効期限に対処するために、トークン管理クラスをカプセル化し、トークンを自動(dòng)的に更新できます。要するに、文書に従って適切な方法を選択し、重要な情報(bào)を安全に保存することが重要です。

PythonでAPIをテストする方法 PythonでAPIをテストする方法 Jul 12, 2025 am 02:47 AM

APIをテストするには、Pythonのリクエストライブラリを使用する必要があります。手順は、ライブラリのインストール、リクエストの送信、応答の確認(rèn)、タイムアウトの設(shè)定、再試行です。まず、pipinstallRequestsを介してライブラリをインストールします。次に、requests.get()またはrequests.post()およびその他のメソッドを使用して、get requestsを送信または投稿します。次に、respons.status_codeとresponse.json()を確認(rèn)して、返品結(jié)果が期待に準(zhǔn)拠していることを確認(rèn)します。最後に、タイムアウトパラメーターを追加してタイムアウト時(shí)間を設(shè)定し、再試行ライブラリを組み合わせて自動(dòng)再生を?qū)g現(xiàn)して安定性を高めます。

関數(shù)のPython変數(shù)スコープ 関數(shù)のPython変數(shù)スコープ Jul 12, 2025 am 02:49 AM

Pythonでは、関數(shù)內(nèi)で定義されている変數(shù)はローカル変數(shù)であり、関數(shù)內(nèi)でのみ有効です。外部から定義されているのは、どこでも読むことができるグローバル変數(shù)です。 1。関數(shù)が実行されると、ローカル変數(shù)が破壊されます。 2。関數(shù)はグローバル変數(shù)にアクセスできますが、直接変更できないため、グローバルキーワードが必要です。 3.ネストされた関數(shù)で外部関數(shù)変數(shù)を変更する場(chǎng)合は、非ローカルキーワードを使用する必要があります。 4。同じ名前の変數(shù)は、異なるスコープで互いに影響を與えません。 5。グローバル変數(shù)を変更するときにグローバルを宣言する必要があります。それ以外の場(chǎng)合は、バウンドロカレラーロールエラーが発生します。これらのルールを理解することで、バグを回避し、より信頼性の高い機(jī)能を書くことができます。

Python Fastapiチュートリアル Python Fastapiチュートリアル Jul 12, 2025 am 02:42 AM

Pythonを使用して最新の効率的なAPIを作成するには、Fastapiをお?jiǎng)幛幛筏蓼?。?biāo)準(zhǔn)のPythonタイプのプロンプトに基づいており、優(yōu)れたパフォーマンスでドキュメントを自動(dòng)的に生成できます。 FastAPIおよびASGIサーバーUVICORNをインストールした後、インターフェイスコードを記述できます。ルートを定義し、処理機(jī)能を作成し、データを返すことにより、APIをすばやく構(gòu)築できます。 Fastapiは、さまざまなHTTPメソッドをサポートし、自動(dòng)的に生成されたSwaggeruiおよびRedocドキュメントシステムを提供します。 URLパラメーターはパス定義を介してキャプチャできますが、クエリパラメーターは、関數(shù)パラメーターのデフォルト値を設(shè)定することで実裝できます。 Pydanticモデルの合理的な使用は、開発の効率と精度を改善するのに役立ちます。

タイムアウト付きのループ用Python タイムアウト付きのループ用Python Jul 12, 2025 am 02:17 AM

ループ用のPythonにタイムアウトコントロールを追加します。 1. The Timeモジュールで開始時(shí)間を記録し、各反復(fù)でタイムアウトしているかどうかを判斷し、ブレークを使用してループから飛び出すことができます。 2。クラスのタスクを投票するには、whileループを使用して時(shí)間の判斷に合わせて、睡眠を追加してCPUの膨満感を避けることができます。 3.高度な方法は、より正確な制御を?qū)g現(xiàn)するためにスレッドまたは信號(hào)を検討することができますが、複雑さは高く、初心者が選択することは推奨されません。概要キーポイント:手動(dòng)の時(shí)間判斷は基本的なソリューションですが、時(shí)間制限付き待機(jī)クラスのタスクに適しています。睡眠は不可欠であり、高度な方法は特定のシナリオに適しています。

Pythonで大きなJSONファイルを解析する方法は? Pythonで大きなJSONファイルを解析する方法は? Jul 13, 2025 am 01:46 AM

Pythonで大きなJSONファイルを効率的に処理する方法は? 1. IJSONライブラリを使用して、アイテムごとの解析を介してメモリオーバーフローをストリーミングして回避します。 2. JSonlines形式の場(chǎng)合は、行ごとに読み取り、json.loads()で処理できます。 3.または、大きなファイルを小さな部分に分割してから、個(gè)別に処理します。これらの方法は、メモリ制限の問題を効果的に解決し、さまざまなシナリオに適しています。

タプルの上のループ用のPython タプルの上のループ用のPython Jul 13, 2025 am 02:55 AM

Pythonでは、ループを使用してタプルを通過する方法には、要素を直接繰り返し、インデックスと要素を同時(shí)に取得し、ネストされたタプルを処理する方法が含まれます。 1。インデックスを管理せずに、for loopを直接使用して、各要素に順番に各要素にアクセスします。 2。enumerate()を使用して、同時(shí)にインデックスと値を取得します。デフォルトのインデックスは0で、開始パラメーターも指定できます。 3.ネストされたタプルはループで開梱できますが、サブタプル構(gòu)造が一貫していることを確認(rèn)する必要があります。さらに、タプルは不変であり、ループでコンテンツを変更することはできません。不要な値は\ _によって無視できます。エラーを避けるために、トラバースする前にタプルが空であるかどうかを確認(rèn)することをお?jiǎng)幛幛筏蓼埂?/p>

Pythonデフォルトの引數(shù)とそれらの潛在的な問題とは何ですか? Pythonデフォルトの引數(shù)とそれらの潛在的な問題とは何ですか? Jul 12, 2025 am 02:39 AM

Pythonデフォルトパラメーターは、機(jī)能が定義されているときに評(píng)価され、固定値が評(píng)価され、予期しない問題を引き起こす可能性があります。デフォルトのパラメーターなどのリストなどの変數(shù)オブジェクトを使用すると、変更が保持され、代わりになしを使用することをお?jiǎng)幛幛筏蓼?。デフォルトのパラメータースコープは、定義されたときの環(huán)境変數(shù)であり、その後の変數(shù)の変更はその値に影響しません。狀態(tài)を保存するためにデフォルトのパラメーターに依存しないでください。クラスのカプセル化狀態(tài)を使用して、関數(shù)の一貫性を確保する必要があります。

See all articles