0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PHPでチェックサム(XOR)を取得する実装方法

Posted at

#前書き
 あまり具体的なPHPでのチェックサム(XOR)の実装方法の記事がなかったので記録も兼ねて作成してみました。
 実行速度がより速い方法は色々あると思いますので、あくまで参考程度にしてください。

#実装


$data = "対象文字列"; 
$binary_data = bin2hex($data); //文字列をバイナリデータ(16進数)に変換
$binary_array = str_split($binary_data, 2); //バイナリデータを2bit毎に分ける
foreach($binary_array as $key => $binary) {
  if($key === 0) {
    $check_sum_first = sprintf('%08d', decbin(hexdec($binary))); //16進数⇒10進数⇒2進数(0左詰めの8bit)
    continue;
  }
  $check_sum_second = sprintf('%08d', decbin(hexdec($binary)));
  // 1bitずつ排他的論理和(xor)を求める
  for($i = 0, $i < strlen($check_sum_first), $i++) {
    $check_sum_first[$i] = intval($check_sum_first[$i]) ^ intval($check_sum_second[$i]);
  }
}
//2進数⇒10進数⇒16進数⇒デコード処理
$check_sum = hex2bin(dechex(bindec($check_sum_first)));

#後書き

 実装見てわかる通り、泥臭いやり方をしています。
 文字列を16進数に変換後、2bit毎に配列に分けて2進数(8bit)に変換してから1bit毎に排他的論理和を求めています。
 実際に正しくチェックサムの結果が出てるかどうかはツール等を使わないとわからないので
バイナリエディターやXOR算出ツールなどを利用して確認してみてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?