Python에서 PGP를 수행하는 방법(키 생성, 암호화/암호 해독)

설치 프로그램을 통해 윈도우 사용자들에게 배포하기 위해 파이썬으로 프로그램을 만들고 있다.

프로그램은 사용자'의 공개 키로 암호화된 파일을 매일 다운로드 한 후 암호를 해독할 수 있어야 한다.

Python 라이브러리를 찾아서 공용 PGP 키와 개인 PGP 키를 생성하고 공용 키로 암호화된 파일을 해독해야 합니다.

이것이 pyCrypto가 할 수 있는 일인가? (서류가 불분명하다) 다른 순수 파이썬 라이브러리는 없나요? 어떤 언어로든 독립 실행형 명령줄 툴은 어떻습니까?

지금까지 본 것은 GNUPG뿐인데 윈도우에 설치하면 레지스트리에 작업이 되고 dl'가 사방에 퍼지게 되는데, 사용자가 이것을 이미 설치했는지, 기존 키링을 어떻게 백업해야 하는지 등을 걱정해야 합니다. 나는 차라리 파이썬 라이브러리나 명령행 도구를 가지고 키를 직접 관리하는 것이 좋다.

업데이트: pyME는 동작할 수 있지만 Python 2.4와 호환이 되지 않는 것 같습니다.

해결책

39 ',' 또는 't need' 피크리프토 너회가 don& 피메, 그렇게 할 수 있습니다 - 해당 패키지를 표시되어도 온갖 문제를 창 아래에 있다. 대신 왜안돼요 피하고 토끼 구멍 및 do what I did? Gnupg 1.4.9 '사용'. # 39 의 don& 전체 설치 할 수 있습니다, t '와' 에서 '그냥' 제프 고드레스 엔드유저의 머신뿐만 이콩버트들러 분배란 충분하나니 필요가 있다, 방금 그 중에서 파이썬 코드를 사용하여 적절한 위치에 경로이거나 액세스되는 전체 경로명입니다. 아무런 변화를 레지스트리로 필요합니다 (실행 파일 및 데이터 파일), 모든 단일 폴더에서는 스케쳐내 제한될 수 있습니다.

39, 'GPG.py' s a 모듈에서는 there& 처음 쓴 리처드 존스, 향산된 의해 한층 더 높이고 있는 앤드류 쿠치링 스티브야 트로고트. # 39 에 사용할 수 있지만, 있는 그대로 it& it& here # 39 에 맞지 않는다는 windows용 오스윈포크 사용하기 때문에 ' ()'. 비록 일부가 피크리프토 당초 ',' '와' 만 하는 것은 다른 부분을 완전히 독립적 피크리프토 gpg.exe/iconv.dll 작동하려면 *.

I have a 버전 ('gnupg.py'), 'GPG.py', 's 파생됨 Traugott& # 39 를 사용하는 하위' 모듈에서는. 적어도 내 용도로 사용하기 위해 Windows 에서 작동하잖아 좋아요 - 난 다음 작업을 수행할 수 있습니다.

  • 키 관리 세대, 열거합니다 내보내십시오 상술합니다.
  • 가져오기의 외부 소스에서 키 (예를 들어, 공개 키 수신되었습니다 파트너의 회사)
  • 데이터 암호화 및 해독을
  • 예증으로 및 서명 확인

39 는 모듈에서는 I& 적합하지 않음, ve got 표시하십시오 포함되어 있으므로, 일부 다른 물건을 shouldn& 있는 지금, 즉 t t be there - # 39 이 순간 내가 can& # 39, 있는 그대로 놓습니다. 어떤 점에서 아마도 "앞으로 몇 주 동안, 좀 더 추가할 수 있기를 바란다" 고 깔끔한 it up, 유닛 테스트 (I don& 없다 / 확인, 예를 들어, 모든 # 39 의 유닛 테스트 예중이) 및 릴리즈하라는 정보기술 (it) (통칭 '은 원래' 또는 이와 비슷한 상업 친화적 인 것에 따라 피크리프토 라이센스에서). # 39, s, t 진정하라구요 http://www. gnu. Traugott& can& 경우 # 39 와 모듈 및 이를 수정할 수 있도록 작동합니까 교도관님도요 - it wasn& # 39, t 는 하위 작동합니까 '너무' 모듈에서는.

이 방식은 다른 아픈 것보다 훨씬 적은 모함이야 (예를 들어 '통음' 기반 솔루션 구축 솔루션을 필요로 하는 '/' 또는 'MinGW MSYS') 와 함께 할 수 있는 내가 경험했다. # 39, ve 사용되는 i& 같은 ('' / '제프 고드레스 이콩버트들러') ',' C # 와 같은 다른 언어로 외곽진입 시스템과 함께 기록되었으므로 수월하게 결과를 얻을 수 있습니다. (예:

추신 작동하잖아 파이썬 2.4 와 파이썬 2.5 이상에서는 아니라. 어떤 문제가 # 39, 내가 아닌 다른 버전과 테스트되었습니다 표시되어도 don& 예측할 수 없다.

해설 (9)

이후 많은 땅을 파고, 찾았다고 패키지이므로 협력했습니다 for me. 비록 지원할 수 있는 것, 내가 didn& 키 # 39 세대, t 테스트 합니다. 그러나 내가 관리할 수 있는 메시지를 암호화됩니다 GPG 는 공개 키 암호를 해독할 수 있었다. 이 패키지는 할 수 없는 GPG 는 파이썬 기반 구축, 실행 파일 시스템에서 OpenPGP 아니라 주변의 래퍼 실행가능파일). 내가 만들어 클레오파트라 GPG4win 사용하여 windows 용 및 개인 및 공용 키 내 코드를 볼 수 있습니다.

import pgpy
emsg = pgpy.PGPMessage.from_file(<path to the file from the client that was encrypted using your public key>)
key,_  = pgpy.PGPKey.from_file(<path to your private key>)
with key.unlock():
    print (key.decrypt(emsg).message)

하지만 문제는 매우 오래된. 이를 통해 향후 사용자가 됐으면 좋겠다 "고 말했다.

해설 (3)

PyCrypto는 PGP를 지원합니다. PyCrypto는 PGP가 사양에 맞는지 테스트해야 합니다.

문서를 구하기는 어렵지만 Util/test.py(모듈 테스트 스크립트)을 살펴보면 PGP 지원의 기본적인 예를 찾을 수 있습니다.

if verbose: print '  PGP mode:',
obj1=ciph.new(password, ciph.MODE_PGP, IV)
obj2=ciph.new(password, ciph.MODE_PGP, IV)
start=time.time()
ciphertext=obj1.encrypt(str)
plaintext=obj2.decrypt(ciphertext)
end=time.time()
if (plaintext!=str):
    die('Error in resulting plaintext from PGP mode')
print_timing(256, end-start, verbose)
del obj1, obj2

또한 PublicKey/pubkey.py은 다음과 같은 관련 방법을 제공한다.

def encrypt(self, plaintext, K)
def decrypt(self, ciphertext):
def sign(self, M, K):
def verify (self, M, signature):
def can_sign (self):
    """can_sign() : bool
    Return a Boolean value recording whether this algorithm can
    generate signatures.  (This does not imply that this
    particular key object has the private information required to
    to generate a signature.)
    """
    return 1
해설 (3)

PyMe은 파이썬 2.4와 완전히 호환된다고 주장합니다.

최신 버전의 PyMe(현재) 쓰기)는 v0.8.0입니다. 그것의 이진법 데비안의 배포가 컴파일되었습니다. SWIG v1.33 및 GCC v4.2.3의 경우 GPGME v1.1.6 및 Python v2.3.5, v2.4.4 및 v2.5.2(제공: '이(가)'배포(당시)). Windows용 바이너리 분포 는 SWIG v1.3.29로 컴파일되었으며 GPGME v1.1.6 및 Python용 MinGW v4.1 v2.5.2(동일한 이진 가져오기) v2.4.2에서는 다음과 같이 >이 설치되어 정상적으로 작동합니다. 글쎄요.)

왜 "이것이 제가 사용해야 하는 Python 2.4와 호환이 되지 않는 것 같다고 말씀하시는지 잘 모르겠습니다"-- 구체적으로 말씀해 주시겠어요?

그리고 GPGME에는 SWIGd(Semi-Pythonic) 래퍼로 존재합니다. 기본적으로 기능을 하는 C 라이브러리가 있으면 Python 확장을 개발할 수 있는 대중적인 방법입니다.

PyPgp는 훨씬 더 간단한 접근 방식을 가지고 있는데, 이는 왜 이것이 단순한 단일 파이썬 스크립트인지에 대한 것이다. 예를 들어, 암호 해독은 다음과 같다.

def decrypt(data):
    "Decrypt a string - if you have the right key."
    pw,pr = os.popen2('pgpv -f')
    pw.write(data)
    pw.close()
    ptext = pr.read()
    return ptext

즉, 암호화된 사이퍼 텍스트를 'pgpv -f'의 표준 입력에 쓰고 pgpv'의 표준 출력을 해독된 일반 텍스트로 읽습니다.

PyPgp는 매우 오래된 프로젝트이지만, 그 단순성으로 인해 현대의 파이썬에서 동작하는 것은 어렵지 않다. 그러나 PGP을(를) 설치하거나 PyPgp won't win't anything anything anything;-)을(를) 설치해야 합니다.

해설 (2)

M2Crypto에는 PGP 모듈이 있지만 실제로 사용해 본 적은 없습니다. 만약 당신이 그것을 시도한다면, 저에게 알려주세요 (저는 현재 M2Crypto 유지 관리자입니다). 일부 링크:

업데이트: PGP 모듈은 키를 생성하는 방법을 제공하지 않지만, 하위 수준 RSA, DSA 등의 모듈로 키를 생성할 수 있습니다. 나는 PGP 속을 모르기 때문에 당신이 자세한 내용을 파헤쳐야 합니다. 또한 openssl 명령줄 명령을 사용하여 이러한 명령을 생성하는 방법을 알고 있다면 M2Crypto 호출로 변환하는 것이 상당히 쉬울 것입니다.

해설 (2)

이 때문에, 그 밖의 %s/dbase/ext_table. 피메 it& # 39 는 다음과 같이 정식 솔루션을 기반으로 제프 그메 의 일부인 gnupg 환경.

Windows 용 사용할 것을 강력하게 추천합니까 [Gpg4win] (http://www.gpg4win.org) 를 gnupg 분배란, 이유는 크게 두 가지다.

39 의 it& GnuPG 2 '에는' 를 기반으로, 그밖에 다른 것들로 gpg2.exe 수 있는 (마침내, 나는 추가할 수 있습니다:) '시작' gpg-agent.exe 온디맨드 (gpg v1.x can& # 39, t).

39 에 의해, 그리고 it& 유일한 공식 indows 구축하십시오 gnupg 개발자. E. g. it& # 39 의 비자유 소프트웨어가 아닌 Windows, Linux 에서 완전히 금지커서 컴파일됨 그러하매 요타 에 사용된 준비에 (매우 중요한 보안 제품군:).

해설 (0)