【问题标题】:When deciphering with RC4, what does it mean to skip bytes?使用 RC4 解密时,跳过字节是什么意思?
【发布时间】:2020-04-19 18:51:55
【问题描述】:

我有需要破译的二进制数据、算法 (RC4) 和密钥。但是,为了破译数据,我得到的一条指令是“最初跳过密钥的长度”或“最初跳过 len 个字节”。

这到底是什么意思?这是否意味着如果我的密钥长 10 个字节,我需要将没有前 10 个字节的二进制数据传递给解密器,然后将前 10 个字节与解密的字节连接起来?

const decipher = crypto.createDecipheriv('RC4', 'mysuperkey', null);
const buffer = decipher.update(data.slice('mysuperkey'.length));

decipher.final();

这不起作用,所以我可能看不懂说明。

【问题讨论】:

    标签: node.js encryption binary buffer rc4-cipher


    【解决方案1】:

    RC4 的第一位是不安全的,因此通常会指示您跳过 密钥流 的一些初始字节。流密码的工作方式是创建一个依赖于密钥的伪随机数据流。该流与明文进行异或以创建密文,并与密文进行异或以创建明文。

    要跳过密钥流的多个字节,您可以简单地加密/解密一些(零值)字节并丢弃结果。这适用于加密和解密。如果 API 有特定的 skip 方法,那么您当然应该使用它,但我认为 CryptoJS 中不存在它。

    【讨论】:

    • 嘿@Maarten,感谢您的回答。我刚刚在 crypto.stackexchange 上阅读了你的答案,真是巧合!我正在使用本机节点 crypto 模块,它没有内置的跳过选项,但是你提到的 CryptoJS 库,我刚刚检查过,实际上有一个 drop 选项(RC4-drop),它是很棒的。但是,我想了解您所说的“要跳过密钥流的多个字节,您可以简单地加密/解密一些(零值)字节并丢弃结果。”是什么意思。我是否必须使用相同的密钥流解密两次?一次用于 0 字节,一次用于
    • 一旦我从密钥流中丢弃了 x 个字节,对于我的密文来说,密钥流不会太短吗?
    • 不,密钥流或多或少是无限的。
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 2012-08-01
    • 1970-01-01
    • 2012-02-02
    • 2019-12-25
    • 2015-07-23
    • 2021-03-09
    • 2011-04-30
    相关资源
    最近更新 更多