加密文本,如英文文本

时间:2015-01-13 17:18:41

标签: javascript encryption

是否有一种方法可以将文本和输出加密为常见的英语/西班牙语文本或类似文件,并且能够解密它?

我尝试了凯撒加密

http://en.wikipedia.org/wiki/Caesar_cipher

Plaintext:  THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG    
Ciphertext: QEB NRFZH YOLTK CLU GRJMP LSBO QEB IXWV ALD

但我喜欢输出例如:

Plaintext:  THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG    
Ciphertext: RADIO LIBRARY MAKE TABLE TIME ON KITCHEN DAY OF

3 个答案:

答案 0 :(得分:0)

当然可以使用专门设计的一次性垫。 XOR明文和目标密文,你得到了密钥。 key.length = max(pt.length, ct.length)这显然仅适用于一个PT,CT对。

答案 1 :(得分:0)

这是一个可能的解决方案。在数组中使用英语或西班牙语字典可能存在性能问题,但您可能只需要常用字词。

function wordSwap(String str){
    var dictionary = Array(a, the, brown, fox, over, ...);
    var swapDictionary = randomizeArray(dictionary);
    var newStr = "";

    str = str.split(' ');
    foreach(str as s){
        var idx = dictionary.indexOf(s);
        newStr += swapDictionary[idx]+" ";
    }

    return newStr;
}

答案 2 :(得分:0)

杰克的回答很简单,并且很好地匹配你的凯撒密码,但它不是很安全。它只是一个具有更大“字母”的替代密码。就像你的Caesar Cipher一样,这意味着它可以通过频率分析来破解。 THE和AND这两个词在英语中很常见。 ÉL和LA在西班牙语中极为常见。因此,我寻找在密文中非常常见的“单词”,并假设它们映射到目标语言中的常用单词。我继续根据频率和上下文进行猜测,直到我计算出部分消息(甚至是整个消息)。如果我知道这可能是关于贵宾犬的,我看到SUNRISE经常出现在消息中,也许我认为SUNRISE是一只贵宾犬,我从那里开始工作。

我喜欢这样简单,但如果我想要安全,我不会那么喜欢。

我们可以设计一种格式保留加密方案,这是你在这里想要的,但我不熟悉那种设计用于这么大的域(它是你可以调查的区域,或者问在http://crypto.stackexchange.com上,这个问题会更好。)格式保留加密的优点是生成的消息应与原始消息的大小相同。

但这是我们可以使用的另一种解决方案,它是一种基本N编码,其中N是我们字典的大小。

从有序词典和明文开始。查找词典中的每个单词并记下索引。使用这些索引创建新消息,其中字大小基于字典中的元素数。为简单起见,您可以将每个项最多舍入为64位,但如果您愿意进行更多位数学运算并让数据跨越字节边界,您也可以使每个项任意位数。无论如何加密该消息(即AES)。

现在我们需要将其编码为单词。对于小于N-1的值,我们只需从字典中选择该单词。对于等于N-1或更大的数字,您可以使用字典中的最后一个单词作为标记,然后将下一个单词添加到其中。所以说我们有一个1000字的字典(0..999),从A到ZYRIAN。我们可以将999编码为ZYRIAN A,将1000编码为ZYRIAN AARDVARK。如果我们需要编码更大的数字,我们可以链接。例如,ZYRIAN ZYRIAN A是1998年。当然,如果再次让数据跨越字节边界,没有值大于2 * N,你将获得更好的输出大小。

这里的关键是我们已经将问题分解为两个问题:允许我们在任意单词和数字之间进行转换的代码转换器,以及使用任何标准加密方案可以执行的加密。