>백엔드 개발 >파이썬 튜토리얼 >j 공개 키 복호화를 위해 rsa 라이브러리를 사용하는 Python의 방법에 대한 자세한 설명

j 공개 키 복호화를 위해 rsa 라이브러리를 사용하는 Python의 방법에 대한 자세한 설명

小云云
小云云원래의
2017-12-12 09:16:063496검색

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의 순열 및 조합 계산 연산 구현 예

Python의 이진 검색 및 빠른 정렬 예에 대한 자세한 설명

정규식 커넥터를 사용하는 Python용 샘플 코드

위 내용은 j 공개 키 복호화를 위해 rsa 라이브러리를 사용하는 Python의 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.