У меня есть логин c для подписи данных в Java, как показано ниже:
public String encryptWithRSA(String data) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, IOException, InvalidKeySpecException, SignatureException {
Signature privateSignature = Signature.getInstance("SHA256withRSA");
privateSignature.initSign(getPrivateKey());
privateSignature.update(data.getBytes("UTF-8"));
byte[] signature = privateSignature.sign();
return Base64.getEncoder().encodeToString(signature);
}
Мне нужно проверить подпись в Go Lang. У меня есть код, как показано ниже:
func validData(tcktsignature string, ticketInfo string) bool {
message := []byte(ticketInfo)
hashed := sha256.Sum256(message)
log.Printf("Hash value = %x",hashed)
signature, _ := base64.StdEncoding.DecodeString(tcktsignature)
err := rsa.VerifyPKCS1v15(getPublicKey(), crypto.SHA256, hashed[:], signature)
if err != nil {
log.Printf("Error from verification: %s\n", err)
return false
}
return true
}
func getPublicKey() (PublicKey *rsa.PublicKey) {
pubPEM := getFileContent(pubKeyPath)
key, _ := base64.StdEncoding.DecodeString(pubPEM)
re, err := x509.ParsePKIXPublicKey(key)
if err != nil {
log.Println(err)
}
pub := re.(*rsa.PublicKey)
return pub
}
Но Go Ланг дает мне ошибку: Ошибка при проверке: crypto / rsa: ошибка проверки
Я сравнил Значение Has, сгенерированное как Java, так и Go Lang, одинаково. Но я не уверен, почему это терпит неудачу. Кто-нибудь может мне помочь?
Закрытый ключ в Java генерируется следующим образом:
KeyPair generateRSAKeys() {
KeyPair keyPair = null;
try {
File privateKeyFile = new File(PRIVATE_KEY_FILENAME);
File publicKeyFile = new File(PUBLIC_KEY_FILENAME);
if (!privateKeyFile.exists() || !publicKeyFile.exists()) {
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
keyPair = kpg.generateKeyPair();
writeToFile(PRIVATE_KEY_FILENAME, keyPair.getPrivate().getEncoded());
writeToFile(PUBLIC_KEY_FILENAME, keyPair.getPublic().getEncoded());
}
} catch (Exception e) {
e.printStackTrace();
}
return keyPair;
}