LoginSignup
1
0

More than 1 year has passed since last update.

# JAVAカスタム暗号化アルゴリズム(1)

Posted at

JAVAカスタム暗号化アルゴリズム(1)

 1.基本知  

  1. ビットとバイトの関係
    • 1)ビットは、メモリ内の最小のストレージユニットであり、0または1のいずれかです.
    • 2)1バイト= 8ビット
    • 3)バイトはJavaで最小のストレージユニットです.
  2. メモリ内のint型の格納方法(サンプル)
    • Javaのint型の長さは32ビットです
    • 最上位ビットは符号ビットです.1は負の数を意味し、0は正の数を意味します.
    • したがって、Javaのint型の値の範囲は(- 2 ^ 31)〜(2 ^ 31)です.
    • 数値は2の補数の形でメモリに保存されます.
  3. バイナリの基本的な知識
    • 元の数の場合、最上位ビットは符号ビットであり、残りのビットは数値の絶対値の2進数です.
    • シフト操作「>>」、右シフト.
    • ビット単位のANDで「&」を計算します.2つのビットが同時に1の場合、結果は1になり、それ以外の場合は0になります.

 2.int型をbyte []型に変換する方法

  1. 一致する長さのバイト配列を作成します
    • 1バイト= 8ビット
    • intの長さは32ビット、バイトの長さは8ビット
    • したがって、byte[4]はint型の値を格納できます
  2. intをbyte[4]に格納します  
    • 「>>」操作を使用して、バイトに格納する8ビットを最下位ビットに移動します.
    • 「&」演算を使用して、下位8桁以外の数値を0に変更します. (「&」サンプル)
    • 結果をバイト型に強力に変換します

3.コード

   public static byte[] intToByteArray(int i) {
       byte[] result = new byte[4];
       result[0] = (byte)((i >> 24) & 0xFF);
       result[1] = (byte)((i >> 16) & 0xFF);
       result[2] = (byte)((i >> 8) & 0xFF);
       result[3] = (byte)(i & 0xFF);
       return result;
   }

「& 0xFFの意味は何ですか?説明をご参照ください。」 (説明)

4.説明

  1. $\color{#4285f4}{メモリ内のint型の例}$
    例:10進数の999

    対応するバイナリ値は:1111100111

    メモリ内のストレージ(2の補数は元の数と同じです):

    00000000 00000000 00000011 11100111

    例として10進数の- 999

    元のコード:10000000 00000000 00000011 11100111

    2の補数:11111111 11111111 11111100 00011001

    メモリ内のストレージ:

    11111111 11111111 11111100 00011001

  2. intをbyte [4]に格納する例
    「&」操作を使用して上位ビットを「0」に変更します

    00000000 00000000 00000011 11100111 & 0xFF =>

    00000000 00000000 00000000 11100111


    「& 0xFFの」$\color{#34a853}{説明:}$

    0xFFは16進数で、2進数に変換されます:11111111
    上記の計算は次と同等です.

     00000000 00000000 00000000 11111111(0xFF)

    & 00000000 00000000 00000011 11100111 (999)

     00000000 00000000 00000000 11100111

    「&」が同時に1の場合、結果は1になります.それ以外の場合、結果は0になります.下位8ビットの結果を変更せずに保持すると、残りのビットは0になります.

    「0000000000000000 00000000 11100111」をバイトに強制変換します.これは、下位8ビットをバイトに格納することと同じです.

  3. 結果の確認

    byte [] bResult = intToByteArray(999);

    bResult [0] => 0($\color{#4285f4}{00000000}$ )

    bResult [1] => 0($\color{#4285f4}{00000000}$ )

    bResult [2] => 3($\color{#ea4335}{00000011}$ )

    bResult [3] => - 25($\color{#fbbc05}{11100111}$ )

    2の補数:$\color{#fbbc05}{11100111}$,対応する元の数:$\color{#34a853}{10011001}$

    $\color{#34a853}{10011001}$対応する10進数は:- 25、最上位の桁1は負の数を表します.

    byte [] bResult = intToByteArray(- 999);

    bResult [0] => - 1($\color{#4285f4}{11111111}$)

    bResult [1] => - 1($\color{#4285f4}{11111111}$)

    bResult [2] => - 4($\color{#ea4335}{11111100}$)

    bResult [3] => 25($\color{#fbbc05}{00011001}$)

    2の補数:$\color{#4285f4}{11111111}$対応する元の数は:$\color{#34a853}{10000001}$

    $\color{#34a853}{10000001}$対応する10進数:1、最上位の桁1は負の数を表します.

    2の補数:$\color{#ea4335}{11111100}$対応する元の数は:$\color{#34a853}{10000100}$

    10000100対応する10進数は:4、最上位の桁1は負の数を表します.

    2の補数:$\color{#fbbc05}{00011001}$対応する元の数は:$\color{#34a853}{00011001}$

    00011001対応する10進数は:25、最上位の桁0は正の数を表します.

1
0
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
1
0