您现在的位置是:网站首页>文章详情文章详情

JS加密中的单词数组WordArray与Python交互问题

inlike2022-07-26 原创文章 浏览(1855) 评论(0) 喜欢(9)

简介如何快速将JavaScript中加密中的WordArray数据类型转为,Python加密库中需要的各种参数?

什么是WordArray

在加密库CryptoJS中经常遇到WordArray类型的数据,也称作单词数组,他是单词的字节值放在最高有效位中的一种数据格式(有待商议,参考)。

image.png

JavaScript中操作WordArray


 初始化

var wordArray = CryptoJS.lib.WordArray.create();//创建一个空的 WordArray对象
var wordArray = CryptoJS.lib.WordArray.random(128 / 8);//随机生成指定长度的WordArray对象

 WordArray 对象 —>16进制字符串

var string = wordArray.toString();//默认得到16进制字符串
var string = wordArray.toString(CryptoJS.enc.Utf8);//指定utf-8字符串

 16进制字符串 —>WordArray对象

var wordArray = CryptoJS.enc.Hex.parse(hexString);

 WordArray对象—>utf8字符串

var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);
//等价于2.2中 
wordArray.toString(CryptoJS.enc.Utf8);

 utf8字符串—>WordArray对象

 var wordArray = CryptoJS.enc.Utf8.parse(utf8String);

 WordArray对象—>Base64字符串

var base64String = CryptoJS.enc.Base64.stringify(wordArray);

 Base64字符串—>WordArray对象

var wordArray = CryptoJS.enc.Base64.parse(base64String);

JavaScript中WordArray与Python交互

有些时候在JavaScript只能看到WordArray类型的数据,比如一些key、iv等参数,没有明文数据,如果直接使用toString获得的是数据的16进制字符串,并非密钥或者偏移量的utf-8字符串,是不可以直接相互使用的。如果要在Python中直接使用js中的16进制字符串,那么需要将其转化为bytes类型。可以使用下面两个方法:

import binascii


binascii.unhexlify('b1700a96d03d65c90abb7748b2a4b650')
Out[19]: b'\xb1p\n\x96\xd0=e\xc9\n\xbbwH\xb2\xa4\xb6P'
bytes.fromhex('b1700a96d03d65c90abb7748b2a4b650')
Out[20]: b'\xb1p\n\x96\xd0=e\xc9\n\xbbwH\xb2\xa4\xb6P'

当然,如果想把bytes类型转化为16进制字符串,也可以用下面两个方法:

import binascii


bytes.hex(b'\xb1p\n\x96\xd0=e\xc9\n\xbbwH\xb2\xa4\xb6P')
Out[26]: 'b1700a96d03d65c90abb7748b2a4b650'
binascii.hexlify(b'\xb1p\n\x96\xd0=e\xc9\n\xbbwH\xb2\xa4\xb6P')
Out[27]: b'b1700a96d03d65c90abb7748b2a4b650'



很赞哦! ( 9)
    《Python实战进阶》
    None
    None
    夏至已深

站点信息

  • 建站时间:2019-5-24
  • 网站程序:like in love
  • 主题模板《今夕何夕》
  • 文章统计:104条
  • 文章评论:***条
  • 微信公众号:扫描二维码,关注我们
  • 个人微信公众号