这是问题所在,字符串按以下顺序通过三个单独的加密:原始 - > Base64 - > AES-256 - > Blowfish(无密钥) - >最终。编写一个方法,使用这个三重编码的字符串mystery_string = "OXbVgH7UriGqmRZcqOXUOvJt8Q4JKn5MwD1XP8bg9yHwhssYAKfWE+AMpr25HruA"
并完全解密它到原始状态。
我查看了aes256和河豚的不同库/文档,但所有这些都需要一个密钥。唯一一个不需要密钥的是Base64(即Base64.encode64('some string')
)。不确定从哪里开始。
首先,在没有密钥的情况下破解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。
一些注意事项:
另一个很好的加密库是rb-NaCl。