用PHP中的句子关键字加密句子

时间:2015-03-16 02:15:47

标签: php

我想使用关键字加密句子。例如句子"我爱你"关键字" LOVE"将成为" T ZJZP MJY"。

Words = I LOVE YOU
Keyword = LOVE
Encrypt = T ZJZP MJY

Letter" A"将从字母" L"开始因为" L"是关键字的开头,它将在字母“#34; I"指示字母的字样" T"。然后写信" A"将从字母" O"开始关键字,以便" L"这些词将是" Z"。然后写一封信" A"将从" V"开始得到的关键词" J"。

关键字应该在句子中。

试过这个,但卡住了。

$word = "I LOVE YOU";
$keyword = "LOVE";
$letters = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

$keyword = str_split($keyword);
$word = str_split($word);
$newWord = "";

for($x=0; $x<26 ; $x++){
    for($y=0; $y<sizeof($keyword); $y++){

    }
}

1 个答案:

答案 0 :(得分:2)

我不确定StackOverflow是否是正确的交换,但无论如何我会回答它,你正在寻找的是OTP方法,更具体地说是滚动的OTP方法(意思是它)重复键/键以考虑输入的全长。

最常见的OTP方法是XOR,我先给你看一下代码,然后再解释一下

function OTP($input, $pad) {
    $inputlen = strlen($input);
    $padlen = strlen($pad);
    $inputbytes = unpack("C*", $input); //Unpack C* will convert a string into a byte array, such as 'abc' to Array(0x61, 0x62, 0x63)
    $padbytes = unpack("C*", $pad);

    $output = "";
    for($i = 0; $i < $inputlen; $i++) //Loop through the input string
        $output .= chr($inputbytes[$i + 1] ^ $padbytes[$i % $padlen + 1]);
    return $output;
}

使用带有unpack选项的C*获取每个字符串的字节数组后,您将循环输入字符串,通过相同位置的填充字符对^进行异或运算(mod %长度)。 $i % $padlength确保for循环永远不会循环到大于字符串长度的索引,例如,如果你有一个长度为3的字符串'ABC'和for循环循环到3会导致索引超出边界错误,但是如果$i % <the length of the string>循环循环到3时for计算将等于0,因为3 % 3 = 0和{{1 }}

使用unpack时,绝对必须在索引中加1,因为字节数组零索引。

Here is an example of its use

有趣的事实:正确使用此加密是完全牢不可破的