ホームページ >バックエンド開発 >PHPチュートリアル >環境を持っている兄弟姉妹は、運営を手伝うことができます。
テストデータ $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)})); //base64 エンコード
function my_generate_sign( $str1,$str2)
{
$xorstr = my_xor($str1,$str2);
returnbase64_encode($xorstr);
}
JAVAのXOR暗号化とbase64暗号化を書きましたが、結果のデータは異なるようです。環境に詳しい人が実行を手伝ってくれませんか? ちなみに、my_xor($text,$key) メソッドを正しく理解しているかどうかを説明してください。
ディスカッションへの返信 (解決策)
BQMBDAAABQYFBA==
たとえば、文字列 a= 1149395524 は byte[]=[49, 49, 52, 57, 51, 57, 53, 53, 50, 52] に変換され、バイナリは [110001, 110001,110100,111001] に変換されます。 ,110011, 1110 01,110101 ,110101,110010,110100]
文字列 b= 4255390370 を byte[]=[52, 50, 53, 53, 51, 57, 48, 51, 55, 48] に変換しますバイナリを [ 110100, 110010,11010 1, 110101,110011, 111001,110000,110011,110111,110000]
式に従って (a これを String 型に変換して目に見えない文字列にします
専門家による解説
テストデータ$ 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
}
暗号化された値
$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)