我似乎无法解密一个十六进制缓冲区,我很确定它是用RC4加密的,而且我很确定我知道密钥。作为密码学的初学者,我只想在开始认为我的假设是错误的之前,确定我做的每件事都是正确的。
const crypto = require('crypto');
const buffer = Buffer.from('471b...', 'hex');
const decipher = crypto.createDecipheriv('rc4', 'MyKey', '');
let decrypted = '';
decrypted += decipher.update(buffer, 'hex', 'utf8');
decrypted += decipher.final('utf8');
console.log(decrypted) // outputs stuff like "�Y6�k�"我的十六进制缓冲区真的在RC4中加密了吗?或者我的密钥是对的?
发布于 2020-04-08 10:58:44
我们看不出来。除非输入消息是二进制的,而不是文本,否则算法或键可能是不正确的,因为它看起来不像任何已知的字符编码。
密文和随机密码是无法区分的,这使得检测现代密码变得非常困难(因为你忽略了大部分密文)。然而,RC4是可以区分的,但是您需要复杂的攻击才能将它与随机噪声区分开来;这可能也会识别密码,即使不知道密钥。
此外,可以使用几乎任何类型的密钥大小初始化RC4。较小的键大小可能相对容易施暴
因此,简单地回答如下:
顺便说一句:用十六进制打印明文,以防你想要检查它是否有意义。ASCII很容易以这种方式区分,但其他方案也可能以二进制形式显示模式,如果只看到其中有问号的菱形(或任何其他替换字符,尽管一些字体/终端实际上在字体中显示十六进制值,这是很好的)。
https://stackoverflow.com/questions/61091663
复制相似问题