我正在尝试使用 pycrypto 在 Python 中重写一些 JS(它使用 SJCL 库)。我无法弄清楚如何实现以下代码
aes = new sjcl.cipher.aes( this.key );
bits = sjcl.codec.utf8String.toBits( text );
cipher = sjcl.mode.ccm.encrypt( aes, bits, iv );
cipherIV = sjcl.bitArray.concat( iv, cipher );
return sjcl.codec.base64.fromBits( cipherIV );
我的问题不是加密,而是库处理 fromBits 转换的方式。根据 SJCL 文档:
我们的大多数加密原语在内部对 4 字节字的数组进行操作,但其中许多可以接受不是 4 字节的倍数的参数。该库将位数组(其大小不必是 8 位的倍数)编码为 32 位字的数组。这些位按大端顺序打包成一个字数组,一次 32 位。由于单词是双精度浮点数,它们适合一些额外的数据。我们使用它(以一种私有的、可能改变的方式)来编码数组最后一个字中实际存在的位数。
对我来说,这似乎意味着转换为位数组会增加某种附加信息,我担心这些信息在concat操作期间会很普遍。此外,在 concat 之后,结果作为 base64 字符串返回。我不确定复制这个的正确的“结构”包装参数。