RSA는 공개 키 암호화 알고리즘입니다. RSA의 암호문은 코드의 일반 텍스트에 있는 숫자의 E 거듭제곱으로 이루어진 mod N의 결과입니다. 다음 글은 주로 Python에서 공개키 복호화를 위해 rsa 라이브러리를 사용하는 방법에 대한 튜토리얼을 소개하고 있으며, 샘플 코드를 통해 자세히 소개하고 있으니, 필요한 친구들이 참고하면 도움이 될 것 같습니다.
Foreword
RSA 복호화의 경우, 즉 암호문 번호의 D제곱은 mod N입니다. 즉, 암호문에 D배를 곱한 후 그 결과를 N으로 나누어서 나머지 일반 텍스트를 찾으십시오. D와 N의 조합이 개인 키입니다.
알고리즘의 암호화 및 복호화는 여전히 매우 간단하지만 공개 키와 개인 키를 생성하는 알고리즘은 임의적이지 않습니다. RSA 공개 키를 사용하여 해독합니다. openssl 명령은 openssl rsautl -verify -in cipher_text -inkey public.pem -pubin -outclear_text입니다. 그러나 Python 인터넷에서는 블로그 게시물을 찾을 수 없으며 rsa 암호 해독 서명만 해시합니다. .
여기에서는 rsa 라이브러리가 사용됩니다. 그렇지 않은 경우 공식 웹사이트 https://pypi.python.org/pypi/rsa/3.1.4에서 다운로드할 수 있습니다.
구체적인 설치 방법은 여기에서 참고하실 수 있습니다: http://www.jb51.net/article/70331.htm
원리를 생각한 후, rsa 라이브러리의 Python 코드에서 찾아보았습니다. 확인 코드를 추출하고 다시 테스트해 보니 모든 것이 정상입니다.
코드는 다음과 같습니다.
#! /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
다음과 같이 쉘로 확인합니다.
$ 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
모든 것이 정상입니다. 공개 키 개인 키의 pem, 다음과 같이 pem 파일의 첫 번째 줄과 마지막 줄은 다음과 같으므로 rsa.PublicKey.load_pkcs1이 이를 인식합니다.
관련 권장사항:
Python의 이진 검색 및 빠른 정렬 예에 대한 자세한 설명
위 내용은 j 공개 키 복호화를 위해 rsa 라이브러리를 사용하는 Python의 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!