Cryptography - Signature verification failed, any idea why ?
Can you help me why this code print "false" at he end. thanks.
package sign;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Provider;
import java.security.Security;
import java.security.Signature;
import java.security.cert.Certificate;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
publicclass SignTest{
privatestaticbyte[] sign(byte[] dataToSign){
File certificat =new File("d:\\txt<br clear="all" />gadmin.p12");
String password ="gadmin";
// provider cryptographic algorithm implementation
Security.addProvider(new BouncyCastleProvider());
Provider provBC = Security.getProvider("BC");
try{
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream(certificat), password
.toCharArray());
PrivateKey privatekey = (PrivateKey) keyStore.getKey(
(String) keyStore.aliases().nextElement(), password
.toCharArray());
Signature sigInst = Signature.getInstance("MD5withRSA", provBC);
sigInst.initSign(privatekey);
sigInst.update(dataToSign);
return sigInst.sign();
}catch (Exception e){
e.printStackTrace();
}
returnnull;
}
privatestaticboolean verify(byte[] sigToVerify){
File certificat =new File("d:\\txt<br clear="all" />gadmin.p12");
String password ="gadmin";
// provider cryptographic algorithm implementation
Security.addProvider(new BouncyCastleProvider());
Provider provBC = Security.getProvider("BC");
try{
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(new FileInputStream(certificat), password
.toCharArray());
Certificate cert = keyStore.getCertificate((String) keyStore
.aliases().nextElement());
Signature sigInst = Signature.getInstance("MD5withRSA", provBC);
sigInst.initVerify(cert.getPublicKey());
sigInst.update(sigToVerify);
return sigInst.verify(sigToVerify);
}catch (Exception e){
e.printStackTrace();
}
returnfalse;
}
publicstaticvoid main(String args[]){
// load zip file to sign
File inputZipDataFile =new File("d:<br clear="all" />test.zip");
byte[] dataToSign =newbyte[(int) inputZipDataFile.length()];
DataInputStream in;
try{
in =new DataInputStream(new FileInputStream(inputZipDataFile));
in.readFully(dataToSign);
in.close();
}catch (Exception e){
// TODO Auto-generated catch block
e.printStackTrace();
}
byte[] signature = sign(dataToSign);
boolean verification = verify(signature);
System.out.println(verification);
}
}

