1

我在 Node.js 中有以下代码

    let publicKeyString = '-----BEGIN PUBLIC KEY-----RANDOMPUBLICKEYOMITTED-----END PUBLIC KEY-----\n';

    let publicKey = {
      key: publicKeyString,
      padding: 1
    }
    function _encrypt(input, key) {
        let buf = new Buffer(input, 'utf8');
        console.log('******');
        console.log(buf.length);
        console.log(buf);
        console.log('******');
        let encryptedBuffer = crypto.publicEncrypt(key, buf);
        return encryptedBuffer.toString('base64');
    }
    let card =  {
       "card_type": "ABCD",
       "card_number": "1111222233334444",
       "expiration_month": 01,
       "expiration_year": 2222,
       "security_code": "321"
    };

   let encryptedPayload = _encrypt(JSON.stringify(card), publicKey);

   console.log(encryptedPayload);

我也有测试用例来确定代码是否已正确加密(虽然我不能分享这些)我想在 Java 中有等效的加密代码。我已经引用了一些其他的 stackoverflow 问题,例如字符串加密工作,字节 [] 数组类型的加密在生成密钥的地方不起作用 。这对我不起作用,因为我需要能够设置公钥的字符串。将节点“加密”代码移植到 Java对我不起作用,因为我不相信我需要密码并且节点 js 代码不包含密码,使用 Node.js 加密模块加密并使用 Java 解密(在 Android 应用程序中)确实对我不起作用,因为我无法设置公钥的加密字符串,并且节点 js 加密中等效的 java 加密方法不起作用,因为我的节点 js 代码不包含密码。我还在 java 中引用了这段代码:

    public static PublicKey getKey(String key){
    try{
        byte[] byteKey = Base64.getDecoder().decode(key.getBytes("UTF-8"));
        System.out.println(byteKey.length);
        X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
        KeyFactory kf = KeyFactory.getInstance("RSA");

        return kf.generatePublic(X509publicKey);
    }
    catch(Exception e){
        e.printStackTrace();
    }

    return null;
}

但是,当我简单地插入公钥字符串时,我没有得到正确的加密。我也不确定如何在 Node js 中实现填充以及 crypto.publicencrypt 的默认加密算法是什么。

任何帮助,将不胜感激。

4

0 回答 0