gpt4 book ai didi

c# - 人类语言测试算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:46 24 4
gpt4 key购买 nike

假设我们有一个带有可疑解密 key 的加密字节流。我想用 key 解密消息并验证结果。

如何验证结果?

关于纯文本的唯一已知的事情是它应该包含一个人类语言段落(一个或多个)。我们不能从这段文字中假设更多。

我想开发/使用一种算法来测试解密的输出并预测解密是否成功。

该算法必须适用于所有人类语言(不会特定于一种语言)。

这可能吗?你怎么看?

最佳答案

第0步

解密密文(加密)字节数组以获得明文(解密)字节数组。

如果使用经过身份验证的加密,则使用错误的 key 解密将彻底失败。

如果使用正确的填充 (PKCS#7/PKCS#5),则使用错误 key 解密失败的可能性非常高,因为填充将无法正确解密。

第一步

使用适当的字符编码DecoderExceptionFallback(Java 中的CodingErrorAction.REPORT)将字节数组解码为字符数组。

如果解密的字节数组包含不代表有效字符的字节序列,则解码将失败。假设初始数据是采用相同编码的正确文本,只有在使用错误的 key 时,解密后的字节数组才会包含无效的字节序列。

第二步

实际上,前两步极有可能会暴露错误的 key 。

现在,在使用错误 key 并且解密奇迹般地导致正确填充数据并且解码数据仅包含所选字符编码的有效字节序列的不太可能的情况下,您有一个文本数据并且可以使用两个简单的(但仍然是经验主义的)不需要字典或在线访问的想法:

  1. 在大多数理智的自然语言中,单词由空格分隔。
  2. 在大多数理智的自然语言中,单词都是由字母组成的。

Unicode 通用类别属性对于确定字符类型非常有帮助,而无需特定于一种语言,并且大多数正则表达式实现允许根据 Unicode 类别指定正则表达式模式。

首先,按 SeparatorPunctuation Unicode 类别拆分文本。结果是一个没有空格和标点符号的“单词”列表。

其次,将每个单词与 Letter+ 模式匹配。对于任何自然文本,匹配到不匹配的单词的比率都很高。对于专门构造的类似文本的乱码,它也可能很高,但对于随机字符序列,它肯定会很低。

关于c# - 人类语言测试算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24140133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com