如何识别已使用的文本编码算法?持有明文与对应编码串的技术咨询
编码生成逻辑推导
你观察到的「标准Base64解码无法得到明文、仅对应专用程序能读回内容」的特征,已经可以排除“直接对明文做Base64编码”的可能性。
核心运行逻辑
这类内置保存/读取逻辑的记事本工具,实际执行的是先加密、后Base64编码的两步流程:
- 保存文件时:先将用户输入的明文,通过硬编码在程序内密钥的加密算法转换成二进制密文,再把这串二进制密文做标准Base64编码,作为文本内容写入文件
- 读取文件时:先将文件内的Base64字符串解码为原始二进制密文,再调用内置的密钥解密回明文,显示在程序界面
普通记事本没有内置的解密逻辑,只能直接展示Base64编码后的字符串,自然无法还原出原始内容。
匹配的算法特征
你提供的Base64串3MZ7hIAnvqtIqnxZJyEi+dOuJ1/myCfsbYOCsYKkZto=,解码后对应的二进制长度为32字节,结合轻量小工具的常见实现习惯,大概率对应以下场景:
- 带固定IV的AES对称加密:将16字节长度的初始化向量直接拼接在密文头部,加上16字节长度的加密后明文块,总长度正好为32字节,是这类自制加密记事本最常用的实现方案
- 带固定校验字段的RC4流加密:RC4本身的输出长度和明文长度一致,这类工具一般会在输出头部拼接16字节左右的固定校验值,凑出固定长度的密文再做Base64编码
- 逐字节XOR异或加密:实现门槛最低,通常会在密文头部拼接固定标识值,再拼接异或处理后的明文内容,凑出固定长度的二进制串后再做Base64编码
排查验证方法
- 先对获取到的Base64字符串做标准解码,拿到32字节的原始二进制内容
- 对照已知明文
hello world逐字节比对,如果是XOR加密逻辑,逐字节异或后即可直接得到程序内置的固定密钥 - 测试程序输入不同长度的明文,观察输出的Base64串解码后的二进制长度是否始终固定为32字节,固定长度的特征可以进一步区分是分组加密还是流加密
内容的提问来源于stack exchange,提问作者Vikas Sharma
相关产品推荐
相关产品推荐

