2

sign.verify(署名)は、verifySignatureメソッドでfalseを返します。私は、authenticated passed validityというsignedobject.objファイルで出力ストリームと入力ストリームをどのように使用するかについて、何かする必要があると思います。私はファイルから正しくメッセージを読むことができます。署名付きファイルを読み取った後に署名を検証できません。

コード:

RSAPrivateKey pk = (RSAPrivateKey) ks.getKey("CS2", "fihjo".toCharArray()); 
Signature s = Signature.getInstance("SHA1withRSA"); 
s.initSign(pk); 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ObjectOutputStream oos = new ObjectOutputStream(baos); 
String message = "Hi Sign ME!!!"; 
oos.writeObject(message); 
oos.writeObject(s.sign()); 
byte[] barr = baos.toByteArray(); 
s.update(barr); 

FileOutputStream out1 = new FileOutputStream("signedobject.obj"); 
out1.write(barr); 
//out1.write(s.sign()); 
out1.close(); 

verifySignature(ks); 

verifySignature(キーストア)メソッド:

FileInputStream fis = new FileInputStream("signedobject.obj"); 
ObjectInputStream ois = new ObjectInputStream(fis); 
String message = (String)ois.readObject(); // read message 
System.out.println("msg: "+message); 
byte[] signature = (byte[])ois.readObject(); // read signature, hmmm 

X509Certificate xcert = (X509Certificate) ks.getCertificate("CS1"); 
Signature sign = Signature.getInstance("SHA1withRSA"); 
sign.initVerify(xcert.getPublicKey()); 
sign.update(message.getBytes()); 
if (sign.verify(signature)) // This is where it fails! 
System.out.println("It is validly signed. String: "+message); 
else System.out.println("It isn't valid"); 

答えて

1

あなたがメッセージのバイト配列で更新した後、コールサインをしなければなりません。例:

String message = "Hi Sign ME!!!"; 
s.update(message.getBytes("UTF8"); 
byte[] signature = s.sign() 

oos.writeObject(message); 
oos.writeObject(signature); 
関連する問題