방금 만든 서명을 확인하는 데 문제가 있습니다. 서명을 한 후에는 먼저 Base64를 사용하여 서명을 텍스트로 변환하고 테스트로서 Base64를 디코딩하고 서명을 검증 할 수 있는지 확인하고자했습니다. 이것은 실패합니다. 다음은 오류 처리 기능이없는 코드입니다.Android : DSA 서명 - 서명 및 확인
DSAPrivateKey privateKey = (DSAPrivateKey) keyPair.getPrivate();
DSAPublicKey publicKey = (DSAPublicKey) keyPair.getPublic();
가 지금은 출력을 기록하는 텍스트 및 인쇄에 서명 - 괜찮을 것 같다 :
내 키 쌍이
String text = "test";
Signature signer = null;
signer = Signature.getInstance(privateKey.getAlgorithm());
SignedObject signedObject = null;
signedObject = new SignedObject(text, privateKey, signer);
String print_signature = Base64.encodeToString(signedObject.getSignature(), Base64.DEFAULT);
System.out.println("Base64 Signature: " + print_signature);
지금은 위에서 만든 SignedObject를 개체를 사용하여 서명을 확인하고 Base64가 아닙니다. 이것은 성공 : 만이 매개 변수를 사용하여 서명을 확인해야하므로 AFAIK SignedObject를 개체를 사용할 수 없도록
이Signature verifier = null;
verifier = Signature.getInstance(publicKey.getAlgorithm());
boolean b = signedObject.verify(publicKey, verifier));
내 앱 난 단지 서명자의 공개 인증서와 Base64로 인코딩 된 문자열이있을 것이다.
Signature verifier1 = null;
verifier1 = Signature.getInstance(publicKey.getAlgorithm());
verifier1.initVerify(publicKey);
verifier1.update(text.getBytes()); // sorry I forgot this in original posting
byte[] sig1 = Base64.decode(print_signature, Base64.DEFAULT);
b = verifier1.verify(sig1));
이 확인은 항상 실패합니다 (b = false).
Base64 디코드 이후의 서명 sig1 (바이트 배열)이있는 Base64 인코더 이전의 signedObject.getSignature()에서 반환 된 서명 (바이트 배열)을 확인하는 테스트를 추가했습니다. 일치해라. Base64 잘 작동하는 것, 그래서 내 verifier1 개체 (IMHO) 문제가 있어야합니다. – LJB