有没有办法在Ruby中解密没有密钥的编码字符串?

时间:2019-04-26 18:21:13

标签: ruby encryption base64 aes blowfish

这是问题所在,已按以下顺序通过三个单独的加密传递了一个字符串:原始-> Base64-> AES-256-> Blowfish(无键)->最终。编写一个使用此三重编码字符串mystery_string = "OXbVgH7UriGqmRZcqOXUOvJt8Q4JKn5MwD1XP8bg9yHwhssYAKfWE+AMpr25HruA"并将其完全解密为原始状态的方法。

我查看了有关aes256和河豚的不同库/文档,但是它们都需要一个密钥。唯一不需要密钥的密钥是Base64(即Base64.encode64('some string'))。不太确定从这里去哪里。

1 个答案:

答案 0 :(得分:-1)

首先,在没有密钥的情况下破解AES-256和Blowfish的唯一方法是通过暴力枚举每个可能用作密钥的32字节组合。从理论上讲,这意味着它在我们的一生中是不可破解的。您可能还会利用一些纯文本的漏洞,但我怀疑您是否会在现实生活中遇到这种漏洞。

第二个也是最重要的一点,就是仅仅通过该站点encode-decode.com https://encode-decode.com/,即使您确实知道密码,实际上也没有足够的信息来解码字符串。

AES256密码功能的各种操作模式都需要32字节(有时是64字节)的密钥。您所使用的机密(您可能只是将其保留为空白)需要转换为32字节的加密密钥。这是通过使用散列算法完成的,但是我们不知道使用哪种算法。希望该站点使用了密钥派生功能,从而提供了一些安全益处。但是,密钥派生函数需要多个参数,我们需要知道要输入哪些参数以及我们的机密才能获得正确的加密密钥。

最后,我们不知道该秘密是否在被散列之前与盐连接在一起。在不知道是否使用盐以及盐是什么的情况下,我们无法确定用于加密纯文本的正确的32字节密钥。

总而言之,您的问题的答案是:不,没有一种不知道密钥就可以快速解密该字符串的方法。

但是,加密是一个非常棒的学习主题。

我鼓励您查看OpenSSL library的ruby文档。它们实际上非常好(除了我在下面提到的那些)。

PBKDF2 Password-based Encryption function是我所指的关键派生函数之一。

使用AES加密时,您最有可能要使用经过身份验证的AES-256-GCM

一些注意事项:

  • 不要随意使用密码...了解它们的优缺点
  • 请勿使用AES-128-EBC-explination

另一个好的加密库是rb-NaCl