Крипто-перевод кода с узла JS на Java - PullRequest
2 голосов
/ 17 мая 2019

Я хочу проверить вход в автономном режиме: я нашел следующий код на узле js

const crypto = require('crypto')
const {
  KEYGEN_PUBLIC_KEY,
  LICENSE_KEY
} = process.env

// Extract key and signature from the license key payload
const [encodedKey, encodedSignature] = LICENSE_KEY.split('.')

// Decode the base64 encoded key
const key = Buffer.from(encodedKey, 'base64').toString()

// Verify the signature
const verifier = crypto.createVerify('sha256')
verifier.write(key)
verifier.end()

const ok = verifier.verify(KEYGEN_PUBLIC_KEY, encodedSignature, 'base64')

После этого я попытался переписать этот код на java

byte[] publicBytes = Base64.getDecoder().decode(publicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);

Signature sign = Signature.getInstance("SHA256withRSA");
sign.initVerify(pubKey);
byte[] decode = Base64.getDecoder().decode(signature.getBytes(StandardCharsets.UTF_8));
System.out.println(sign.verify(decode));

Но этоне работаетИсключение составляет Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 2d Кто-нибудь может мне помочь с этой ошибкой?

1 Ответ

2 голосов
/ 17 мая 2019

Можете ли вы попробовать следующий фрагмент кода?

byte[] publicBytes = Base64.getDecoder().decode(publicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpec);

MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(publicBytes);
byte[] outputDigest = messageDigest.digest();

После этого вы можете использовать обычные функции декодирования Base64.Вы можете обратиться ниже пример.https://www.quickprogrammingtips.com/java/how-to-create-sha256-rsa-signature-using-java.html

...