我尝试使用加密对REST API进行身份验证。
首先,我需要调用API来获取encryptionKey
和timestamp
。
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下实现此目的的任何提示?
答案 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以了解更多不同填充的示例。