Войдите в систему Java и подтвердите в Go Lang - PullRequest
1 голос
/ 27 января 2020

У меня есть логин 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;
    }
...