Не могу проверить подпись после прочтения подписанного файла - PullRequest
2 голосов
/ 11 декабря 2011

sign.verify (signature) возвращает false в методе verifySignature;и я думаю, что это как-то связано с тем, как я использую outputtreams и inputtreams с файлом signatureobject.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 (KeyStore):

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 Ответ

1 голос
/ 11 декабря 2011

Вы должны позвонить после обновления в байтовом массиве сообщения. Например:

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

oos.writeObject(message);
oos.writeObject(signature);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...