algorithm - 如何识别使用哪种编码算法?
问题描述
我有一个纯文本及其编码字符串,我想知道使用哪种编码器/算法对字符串进行编码。
纯文本:hello world
编码文本:3MZ7hIAnvqtIqnxZJyEi+dOuJ1/myCfsbYOCsYKkZto=
我知道它与base64有关,但我试过它不适合我。
编辑:我有一个类似 exe 的记事本,我在其中写了“hello world”然后保存了它。当我在普通记事本中打开文本文件时,它会显示“3MZ7hIAnvqtIqnxZJyEi+dOuJ1/myCfsbYOCsYKkZto=”。当我在 exe(我写的地方)中打开同一个文件时,它显示纯文本“hello world”。
解决方案
关于 base64 编码的字符串有两个常见的误解/误解:
解码 base64 编码字符串后获得可读文本的期望,以及编码不同或当结果不符合期望时 base64 解码器不起作用的假设
给定的字符串似乎是 base64 编码的,它仅包含来自 base64 字符集的字符并且已正确填充,因此它很可能是 base64 编码的字符串。Base64 编码用于对各种数据进行编码,但一个非常常见的用例是将二进制数据(不可打印或仅显示为“奇怪”符号字符串)编码为更易于处理的形式。一个典型的用例是对加密或散列的结果进行 base64 编码,这两者都会创建二进制结果。期望 base64 解码是取回原始文件(例如纯文本、密码等)所必需的唯一步骤。
如上所述,base64 通常用于对加密或散列的二进制结果进行编码。Base64 本身不是加密,并且(希望)从未用于保护密码或其他机密信息。
base64编码中的“hello world”是“aGVsbG8gd29ybGQ=”,大家可以用任意base64解码器解码。
密码的过程通常是首先对密码进行哈希处理,然后对二进制哈希值进行 base64 编码。对于其他机密信息,它会先加密,然后再进行 base64 编码。
话虽如此,结论是给定的字符串可能是 base64 编码的哈希或加密文本。
典型的后续问题是:
如果我从解码中得到的二进制乱码是加密或散列的结果,我如何得到纯文本?
答案是:可能根本没有,至少不是基于给定的信息。
如果是散列,则无需解密,因为散列是单向过程。如果它是加密的,则没有信息如何解密它。对于解密,您需要知道加密算法和密钥。
在散列或加密的情况下,二进制信息通常不包含任何将数据标记为任何特定散列或加密算法的结果的标记。
我可以从 base64 编码字符串(除了二进制结果)中获得的唯一信息是长度。给定的字符串长 44 个字符,包括一个填充字符,即 43 * 6(每个 base64 字符编码 6 位)= 258 位,所以可能是 256 位。例如,这可能是一个 sha-256 哈希,但实际上只是一种可能性。
后来在关于存储base64字符串并在读取原始数据后检索原始数据的程序的问题中添加了一段,这使得base64字符串很可能包含加密信息,但这就是我能从中得到的全部。
推荐阅读
- swift - 防止视图在两个方向上溢出
- tensorflow - win 10如何安装tensorflow
- docker - ENV 变量不来自 godotenv Docker
- c# - 在 C# 中将 Json 字符串转换为数据表
- actionscript-3 - SVG 运行时加载库
- java - 是否可以覆盖方法注释但不能覆盖方法?
- powershell - 在 AD 中使用 Powershell 根据其属性部门将用户添加到组
- python-3.x - 无法创建 python 程序来查找 lcm
- game-physics - 即使玩家在 Godot 中移动,如何将刚体 2d 节点吸引到玩家(使用点重力)?
- android - RecylerView在android studio中没有刷新onRefresh