Heim  >  Artikel  >  Backend-Entwicklung  >  有环境的兄弟姐妹帮忙运行下。

有环境的兄弟姐妹帮忙运行下。

WBOY
WBOYOriginal
2016-06-23 13:40:161664Durchsuche

测试数据$str1=“1149395524”,$str2=“4255390370”

//xor
function my_xor($text,$key)
{
    $i = 0;
    $encrypted = "";
    foreach (str_split($text) as $char) {
        $encrypted .= chr(ord($char) ^ ord($key{$i++ % strlen($key)}));
    }
    return $encrypted;
}

//base64 encode
function my_generate_sign($str1,$str2)
{
    $xorstr = my_xor($str1,$str2);
    return base64_encode($xorstr);
}

我根据这个写了JAVA的XOR 和 base64 加密,但得出的数据好像不一样,麻烦有环境的朋友帮我运行下,顺便解释下my_xor($text,$key)方法,看我是否理解错误了。


回复讨论(解决方案)

BQMBDAAABQYFBA==

java 得什么?

JAVA中异或后得到的很多不可见字符。没办法显示。
如 String a= 1149395524  转换为byte[]=[49, 49, 52, 57, 51, 57, 53, 53, 50, 52]  转换二进制为 [110001, 110001,110100,111001,110011, 111001,110101,110101,110010,110100]
如 String b= 4255390370  转换为byte[]=[52, 50, 53, 53, 51, 57, 48, 51, 55, 48]  转换二进制为 [110100, 110010,110101,110101,110011, 111001,110000,110011,110111,110000]
按照公式(a XOR b) 应该得出byte[]=[5, 3, 1, 12, 0, 0, 5, 6, 5, 4]  将这个转换为String类型为不可见字符串
 PHP中得到的结果:[5, 3, 1, 12, 7, 11, 0, 0, 1, 13]   

高人解释下

测试数据$text=“1149395524”,$key=“4255390370”

//xor
function my_xor($text,$key)
{
    $i = 0;
    $encrypted = "";
    foreach (str_split($text) as $char) {
        $encrypted .= chr(ord($char) ^ ord($key{$i++ % strlen($key)}));
    }
    return $encrypted;
}
麻烦贴出下 $encrypted 的值 

$text = '1149395524';$key = '4255390370';$s = my_xor($text, $key);echo base64_encode($s), PHP_EOL;//因为含有不可见字符,所以需要做 base64 编码。你解码就还原了print_r(unpack('C*', $s)); //十进制内码//xorfunction my_xor($text,$key){    $i = 0;    $encrypted = "";    foreach (str_split($text) as $char) {        $encrypted .= chr(ord($char) ^ ord($key{$i++ % strlen($key)}));    }    return $encrypted;}
BQMBDAAABQYFBA==Array(    [1] => 5    [2] => 3    [3] => 1    [4] => 12    [5] => 0    [6] => 0    [7] => 5    [8] => 6    [9] => 5    [10] => 4)

谢谢哥们的耐心解答。我找到原因了。是我自己多此一举,直接用byte[ ] 加密就好。转String后反而不对了。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn