j Explication détaillée de la méthode Python d'utilisation de la bibliothèque rsa pour le décryptage de la clé publique

小云云
Libérer: 2017-12-12 09:16:06
original
3433 Les gens l'ont consulté

RSA est un algorithme cryptographique à clé publique. Le texte chiffré de RSA est le résultat de la recherche du mod N à la puissance E du numéro du code en clair. L'article suivant vous présente principalement le didacticiel sur la façon d'utiliser la bibliothèque rsa pour le déchiffrement de clé publique en python. L'article le présente en détail à travers un exemple de code. Les amis qui en ont besoin peuvent s'y référer.

Avant-propos

Pour le décryptage de RSA, c'est-à-dire que la puissance Dth du numéro de texte chiffré est mod N, c'est-à-dire le texte chiffré et Effectuez lui-même D fois la multiplication, puis divisez le résultat par N pour trouver le reste et obtenir le texte en clair. La combinaison de D et N est la clé privée.

Le cryptage et le déchiffrement de l'algorithme sont encore très simples, mais l'algorithme de génération de la clé publique et de la clé privée n'est pas arbitraire. Utilisez la clé publique RSA pour décrypter. La commande openssl est openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -out clear_text Cependant, je n'ai trouvé aucun article de blog sur Internet Python, je hache seulement la signature de décryptage rsa. .

La bibliothèque rsa est utilisée ici. Sinon, vous pouvez la télécharger depuis le site officiel https://pypi.python.org/pypi/rsa/3.1.4.

Pour des méthodes d'installation spécifiques, vous pouvez vous référer ici : http://www.jb51.net/article/70331.htm

Réfléchissez au principe, puis accédez au code python de la bibliothèque rsa pour le trouver, je l'ai recherché, je l'ai extrait du code de vérification et je l'ai testé à nouveau. Tout allait bien.

Le code est le suivant :

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
#rsa
from rsa import PublicKey, common, transform, core
def f(cipher, PUBLIC_KEY):
 public_key = PublicKey.load_pkcs1(PUBLIC_KEY)
 encrypted = transform.bytes2int(cipher)
 decrypted = core.decrypt_int(encrypted, public_key.e, public_key.n)
 text = transform.int2bytes(decrypted) 
 if len(text) > 0 and text[0] == '\x01':
  pos = text.find('\x00')
  if pos > 0:
  return text[pos+1:]
  else:
  return None 
fn = sys.stdin.readline()[:-1]
public_key = sys.stdin.readline()[:-1]
x = f(open(fn).read(), open(public_key).read())
print x
Copier après la connexion

Vérifiez auprès shell comme suit :

$ openssl genrsa -out pri2048.pem 2048
Generating RSA private key, 2048 bit long modulus
..+++
..............................................+++
e is 65537 (0x10001)
 $ openssl rsa -in pri2048.pem -out pub2048.pem -RSAPublicKey_out
writing RSA key
 $ echo -n 'Just a test' >1.txt
 $ openssl rsautl -sign -in 1.txt -inkey pri2048.pem -out 1.bin
 $ { echo 1.bin; echo pub2048.pem; } | ./test_rsa.py
Just a test
Copier après la connexion

Tout va bien Notez que -RSAPublicKey_out doit être utilisé pour extraire la clé publique pem de la clé privée, afin que la première ligne du fichier pem soit et La dernière ligne soit la suivante, afin que rsa.PublicKey.load_pkcs1 la reconnaisse.

Recommandations associées :

Exemples d'implémentation d'opérations de calcul de permutation et de combinaison en Python

Exemples d'implémentation python de binaire recherche et tri rapide Explication détaillée

Exemple de code Python pour l'utilisation de connecteurs d'expression régulière

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!