gpt4 book ai didi

javascript - 在 python 中实现 SJCL .frombits

转载 作者:行者123 更新时间:2023-12-03 06:21:32 25 4
gpt4 key购买 nike

我正在尝试使用 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 文档:

Most of our crypto primitives operate on arrays of 4-byte words internally, but many of them can take arguments that are not a multiple of 4 bytes. This library encodes arrays of bits (whose size need not be a multiple of 8 bits) as arrays of 32-bit words. The bits are packed, big-endian, into an array of words, 32 bits at a time. Since the words are double-precision floating point numbers, they fit some extra data. We use this (in a private, possibly-changing manner) to encode the number of bits actually present in the last word of the array.

对我来说,这似乎意味着转换为位数组会添加某种附加信息,我担心这些信息在concat操作期间会普遍存在。此外,在连接之后,结果将作为 base64 字符串返回。我不确定复制此内容的正确“结构”打包参数。

最佳答案

如果您仔细查看这段代码,您应该会发现它是独立的。此代码运行后,不再需要 SJCL 的“位”( native 二进制数据表示)。该内部数据被提供给加密和串联函数,然后将结果转换回可移植的“正常”Base64 编码字符串。

此代码可能存在的唯一问题是 this.keyìv 的编码。

PyCrypto 没有特殊的内部二进制数据编码,因为 Python 语言已经为我们提供了二进制字符串或字节(取决于 Python 版本)。但您仍然需要使用 Base64 编码对字符串进行编码/解码。

关于javascript - 在 python 中实现 SJCL .frombits,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com