【问题标题】:Implementing SJCL .frombits in python在 python 中实现 SJCL .frombits
【发布时间】:2016-08-09 10:10:59
【问题描述】:

我正在尝试使用 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 字符串返回。我不确定复制这个的正确“结构”包装参数。

【问题讨论】:

    标签: javascript python cryptography pycrypto sjcl


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 2022-01-10
      • 2016-01-01
      • 2011-07-03
      相关资源
      最近更新 更多