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

问题描述 投票:-2回答:1

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

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

ruby encryption base64 aes blowfish
1个回答
-1
投票

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

其次,最重要的是,只要访问该站点encode-decode.comhttps://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

© www.soinside.com 2019 - 2024. All rights reserved.