邮递员 RSA 加密
Posted
技术标签:
【中文标题】邮递员 RSA 加密【英文标题】:Postman RSA Encryption 【发布时间】:2018-03-19 20:23:15 【问题描述】:我想利用 postman 测试一个 REST API,该 API 需要使用 RSA 加密对输入字段之一进行加密。
我看到邮递员通过require('crypto-js')
提供了使用 AES 加密进行加密的功能,但我该库不提供 RSA 加密。如何使用 post man 自动执行 RSA 加密?
流程会这样工作:
调用返回 RSA 公钥的 REST API
将 RSA 公钥存储在变量中
利用该公钥加密以下请求中的值 发送前
【问题讨论】:
【参考方案1】:我创建了一个小“库”来在 Postman Pre-request 和 Tests 脚本中使用加密方法,完全支持 RSA,看看这里的教程,非常容易使用。
https://joolfe.github.io/postman-util-lib/
最好的问候。
以下是如何使用“RSAOAEP”算法进行 RSA 加密的示例:
// RSAOAEP signature example
const pubkey = '-----BEGIN PUBLIC KEY-----\n' +
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAstXEkU/agbNkQgh6a9DV\n' +
'C/WXGmNy8g+hdTOBhYUk5PfZCwTNt5SCYBLjIPhs2ZRrNuCN3PhwHRQPQOTsS6Nl\n' +
'Bzw+SjPVFBhPcbMHbJWnC87Q5ID/uAuwJjcUQXUTVspwIgfRmHvuuT7w7AYnCNvz\n' +
'B5TuPj2vVH8rij9BXkAHambaeGG7L10MPeUiVU6M0F/QKCJhEWAYGEt4NffSXETx\n' +
'zHSl8nyXxVJfnjxVhnZyZVXTIpLwvRy04hnkAoFexh7npRtnQdsLuIHtaJsm7gFY\n' +
'mxhr3Nxbh9p1pC7fHpJ+jMcxAAhA07WqYf6lOsxXHfPav1FEMX214YTsKTw68xqo\n' +
'DwIDAQAB\n' +
'-----END PUBLIC KEY-----\n'
const fileContent = 'My file content comes here...'
const keyObj = pmlib.rs.KEYUTIL.getKey(pubkey)
const encHex = pmlib.rs.KJUR.crypto.Cipher.encrypt(fileContent, keyObj, 'RSAOAEP')
console.log(encHex)
// will return the hexadecimal encoded, can be converted to many format ussing the library too
【讨论】:
我已经在github.com/joolfe/postman-util-lib/tree/master/postmangithub.com/joolfe/postman-util-lib/tree/master/postman图书馆的邮递员收藏中添加了这个例子 我如何利用你在上一条评论中在 github 上分享的这个 JSON? 嗨,史蒂夫,JSON 是邮递员的集合,所以您只需在您的邮递员应用程序中导入,如此处所述learning.getpostman.com/docs/postman/collection-runs/… 文件内容是什么?是 .pem 文件吗?【参考方案2】:我写的。
你需要https://github.com/digitalbazaar/forge 并编译它,不是来自cdn,不能工作
从您的脚本加载
1.load script
var server = postman.getEnvironmentVariable("server");
if (!postman.getEnvironmentVariable("forgeJS"))
pm.sendRequest("http://" + server + "/res/forge.js", function(err, res)
if (err)
console.log(err);
else
postman.setEnvironmentVariable("forgeJS", res.text());
)
2.eval script and encrypt
var password = '123456';
var public_key = '-----BEGIN PUBLIC KEY-----\n' +
pm.environment.get("rsaKey") + '\n' +
'-----END PUBLIC KEY-----';
var jsscript = pm.environment.get("forgeJS");
eval(jsscript);
console.info(public_key)
var publicKey = forge.pki.publicKeyFromPem(public_key);
var encryptedText = forge.util.encode64(publicKey.encrypt("123456", 'RSA-OAEP', // server Java private decrypt
md: forge.md.sha256.create(),
mgf1:
md: forge.md.sha1.create()
));
postman.setEnvironmentVariable("password", encryptedText);
【讨论】:
这仍然对您有用吗?即使在eval
-ing forge.js 之后,我也得到了ReferenceError: forge is not defined
。
这是因为 postman.setEnvironmentVariable("forgeJS", res.text());在异步回调中执行。如果您可以 - 在预请求脚本中执行第一部分。或者从这里使用技巧community.postman.com/t/…以上是关于邮递员 RSA 加密的主要内容,如果未能解决你的问题,请参考以下文章