postman 加密算法的替代方法,

fae0ux8s  于 2022-11-23  发布在  Postman
关注(0)|答案(1)|浏览(167)

我正在尝试从字符串生成UUID,我基本上想重新创建UUID.nameUUIDFromBytes在Java中的作用。我发现这篇文章在postman之外工作得很好,Java的UUID.nameUUIDFromBytes要用JavaScript编写?-堆栈溢出
但是crypto在Postman中是不可用的。我也在Postman中尝试过CryptoJS,并且已经非常接近了,生成的UUID只差一个字符。

function javaHash(test) {
    var md5Bytes = CryptoJS.MD5(test);
    console.log(md5Bytes);

    md5Bytes[6] &= 0x0f;  /* clear version        */
    md5Bytes[6] |= 0x30;  /* set to version 3     */
    md5Bytes[8] &= 0x3f;  /* clear variant        */
    md5Bytes[8] |= 0x80;  /* set to IETF variant  */
    console.log(md5Bytes);

    return md5Bytes.toString(CryptoJS.enc.Hex).replace(/-/g, "").replace(/(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})/, "$1-$2-$3-$4-$5");
}

console.log(javaHash('123456789'));

从控制台中的值来看,它看起来不像是被方法中间应该发生的任何魔法(设置版本和变量)所更改。
我也尝试过从这里导入加密:https://cdnjs.com/libraries/crypto-js,使用此方法:在Postman中添加外部库| Postman 博客

function javaHash(test) {
    eval(pm.collectionVariables.get("crypto_library"));

    let md5Bytes = this.crypto.createHash('md5').update(test).digest();
    console.log(md5Bytes);
    md5Bytes[6] &= 0x0f;  /* clear version        */
    md5Bytes[6] |= 0x30;  /* set to version 3     */
    md5Bytes[8] &= 0x3f;  /* clear variant        */
    md5Bytes[8] |= 0x80;  /* set to IETF variant  */
    console.log(md5Bytes);

    return md5Bytes.toString(CryptoJS.enc.Hex).replace(/-/g, "").replace(/(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})/, "$1-$2-$3-$4-$5");
}

但我收到错误“评估预请求脚本时出错:TypeError:无法读取未定义的属性(阅读'lib')”
有什么想法吗?

bd1hkmkf

bd1hkmkf1#

CryptoJS代码中的问题是md5Bytes不是字节数组,因此后续的字节操作失败。

  • CryptoJS* 内部使用WordArray类型,即由4字节字组成的数组(此处为s.)。CryptoJS.MD5()也返回此类型。由于MD5输出大小为16字节,因此WordArray由4个字组成(a 4字节)。

由于UUID算法会修改单个字节,因此有必要访问和修改字中的字节。这是可行的,例如将WordArray转换为Uint8Array,反之亦然:
第一个
更高效的是MD5实现,它将哈希作为字节数组(ArrayArrayBufferUint8Array)返回,以便可以 * 直接 * 访问字节,例如js-md5
第一次
但是,我不确定Postman js-md5 是否是一个选项,或者是否有类似的库。
与Java的比较:UUID.nameUUIDFromBytes("12345".getBytes(StandardCharsets.UTF_8)).toString()会传回相同的输出:827ccb0e-ea8a-306c-8c34-a16891f84e7b .
请注意,12345的十六进制编码MD5散列为827ccb0e-ea8a-706c-4c34-a16891f84e7b(具有等效格式)。由于字节操作而导致的差异在索引6和8处(0x 30代替0x 70,0x 8 c代替0x 4c)。

相关问题