在nodejs中创建RSA令牌

时间:2016-03-18 13:59:14

标签: node.js encryption cryptography

我尝试使用加密对REST API进行身份验证。

首先,我需要调用API来获取encryptionKeytimestamp encryptionKey采用Base 64格式。

然后我需要使用密钥创建RSAToken并使用password + "|" + timestamp最终加密密码。

这是使用python对API进行身份验证的一些示例代码

key, timestamp = get_encryption_key()
decoded_key = key.decode('base64')
rsa_key = RSA.importKey(decoded_key)
encrypted = rsa_key.encrypt(password + '|' + str(timestamp), 'x')
encrypted_password = encrypted[0]

import base64
from Crypto.PublicKey import RSA
r = requests.get(my_url, headers=headers)

myData = r.json()
decoded = base64.b64decode(myData['encryptionKey'])
key = RSA.importKey(decoded)
enc = key.encrypt(password + '|' + str(myData['timeStamp']), 'x')
encryptedPassword = enc[0]

session = "/session"
my_url = url + session

payload = {"identifier": identifier,
"password": encryptedPassword,
"encryptedPassword": "True"
}

在Node下实现此目的的任何提示?

1 个答案:

答案 0 :(得分:1)

您可以使用crypto.publicEncrypt加密密码。请注意padding,您可能希望使用Python脚本中使用的正确填充。

const crypto = require('crypto');
const constants = require('constants');
const decodedKey = Buffer(encriptionKey, 'base64').toString();

const encryptedPassword = crypto.publicEncrypt({
    key: decodedKey,
    padding : constants.RSA_PKCS1_OAEP_PADDING
} , Buffer(`${password}|${timestamp}`));

查看此node.js test以了解更多不同填充的示例。