Python/M2Crypto를 사용하여 DSA 서명을 확인하는 데 문제가 있습니다. 서명은 Sun의 암호화 공급자 및 SHA1withDSA 알고리즘 지정과 함께 표준 java.security.Signature 클래스를 사용하여 Java로 생성됩니다. 그것은 두 개의 정수 (0x302c는 44 바이트 순서를 지정하고, 0x0214은을 지정하는 적절한 ASN.1 인코딩 시퀀스처럼 보이M2Crypto : DSA 서명 확인
>>> pk
<M2Crypto.DSA.DSA_pub instance at 0x20b6a28>
>>> sig = '302c02141c4bbb218215ebfec57288059ce814dc430d849502144dd0c581bf2213aff79d17eb37c939e120a97bd2'.decode('hex')
>>> data ='0501...9794'.decode('hex')
>>> pk.verify_asn1(sig, data)
------------------------------------------------------------
Traceback (most recent call last):
...
DSAError: wrong tag
서명 값 내게 OK 같다 : 여기
일부 쉘 출력의 20 바이트 정수)는 DSA 서명의 표준 인코딩입니다. DSA_pub.verify_asn1 방법조차 기록되지 않기 때문에 , 나는 또한 문서화 DSA_pub.verify 방법을 사용하여 시도,하지만 여전히 시가 :>>> r = sig[4:24]
>>> s = sig[26:]
>>> md = sha1(data).digest()
>>> pk.verify(md, r, s)
------------------------------------------------------------
Traceback (most recent call last):
...
DSAError: encoding error
모든 매개 변수를 "바이트 수 있어야 워드 프로세서 상태 문자열 "이지만 verify 메소드는 어떻게 든 인코딩 오류를 발생시킵니다. 또한 잠재적 인 엔디안 문제를 확인하기 위해 r과 s를 뒤집어 봤지만 도움이되지 않았습니다.
내가 뭘 잘못하고 있니? 다음 http://svn.osafoundation.org/m2crypto/trunk/tests/test_dsa.py
verify_asn1 방법이 사용되어야한다 :