Androidセキュリティ暗号化アルゴリズム-対称暗号化
3643 ワード
対称暗号体制は2つに分けられる:1つは明文の単一ビット(またはバイト)を演算し、ストリーム暗号と呼ばれ、シーケンス暗号とも呼ばれる.もう1つは、明文情報を異なるグループ(またはブロック)構造に分割し、各グループ(またはブロック)をそれぞれ暗号化および復号化し、パケットパスワードと呼ぶ.
対称暗号化アルゴリズムの理解方法
私たちはBase 64アルゴリズムを熟知しています.Base 64アルゴリズムは符号化時に対応する文字テーブルを持っています.この文字テーブルは公開されています.文字マッピングテーブルを私たち自身が知っている鍵だけで保存すれば、対称暗号化を構成します.もちろん、対称暗号化は簡単なアルゴリズムではありません.
じっこう
以上はパケット暗号化の中で現在最も流行しているAES暗号化アプリケーションで、以上は128ビットのAES、「AES/CBC/PKCS 5 Padding」、CBCモード、PKCS 5 Padding充填方式、そして私たちが設定した初期ベクトルはkey値で、設定しないとデフォルトは16個の「0」を充填します.
理論
実践部分では暗号化アルゴリズムをカプセル化した後に開発者が使用する過程を話していますが、実際に接触したばかりの開発者であれば、インターネット上でGoogle対称暗号化を行い、以上のコードを見ると愚かになるので、理論部分では対称暗号化の原理を説明します.AES 128を例に、次のいくつかの知識点を理解します.
パケット暗号化は、その名の通り、暗号化する情報を一組に分けて暗号化し、AES-128は、各パケットを128ビット、すなわち16バイトの一組に分けて暗号化する.
1.動作モード電子暗号本モード(ECB)は暗号化のたびに独立した暗号文パケットを生成し、各グループの暗号化結果は他のパケットに影響を及ぼさず、同じ明文暗号化後に対応して同じ暗号文を生成し、初期化ベクトルがない. 暗号リンクモード(CBC)は広く応用されており、明文暗号化前に前の暗号文と異文化または演算を行ってから暗号化されるため、異なる初期ベクトル(初期ベクトルが必要)を選択すれば、同じ明文暗号化後に異なる暗号文が生成される. 暗号文フィードバックモード(CFB)はバイト毎に暗号解読され、パケット暗号化後、8ビットパケットで暗号文と明文をシフトオフして出力が得られると同時にレジスタにフィードバックされ、初期化ベクトルが必要となる. 出力フィードバックモード(OFB)はCFBと同様であり、OFBは前のnビット暗号文出力パケットを用いてシフトレジスタにフィードバックし、ベクトルを初期化する必要がある. カウンタモード(CTR)は、カウンタが初期値からカウントを開始した値をパケット暗号アルゴリズムに送信する.カウンタが増加するにつれて、パケット暗号アルゴリズムは、初期化ベクトルなしで明文パケットと異種または演算するために使用される連続したパケットを出力してビット列を構成する.
2.充填モード
ブロック操作モードではなくフロー操作モードを使用します.ストリームモード暗号化の一例は、実行されるカウンタモードであり、ストリーム動作モードは任意のサイズのメッセージを暗号化および復号化することができるので、埋め込む必要はない.暗号化されたブロックの盗難や残留ブロックの終了など、より複雑な終了メッセージの方法は、充填の必要性を回避する.
暗号化する前に、明文を16バイトの明文のグループに分けましたが、16では割り切れない可能性が高いので、最後のグループを残して16バイトのルールを満たすためにいくつかのデータを埋め込む必要があります.そうすると、多くの埋め込みルールがあります.
AES/CBC/PKCS5Padding
実践編ではPKCS 5 Paddingパディングモードが指定されています
を選択します.
説明する
None
塗りつぶしなし
PKCS7
パディング文字列は、1つのバイトシーケンスからなり、各バイトはそのバイトシーケンスの長さをパディングします.PKCS#5パディングは、PKCS#7パディングと同じであるが、64ビット(8バイト)のブロックサイズを使用するブロックパスワードとしてのみ定義される.実際には両者を交換して使用することができます.
Zeros
塗りつぶし文字列は、ゼロに設定されたバイトで構成されます.
ANSIX923
ANSIX 923パディング文字列は、バイトシーケンスの最後のバイトがバイトシーケンスの長さをパディングし、残りのバイトは数値ゼロをパディングします.
ISO10126
ISO 10126パディング文字列は1バイトシーケンスからなり、このバイトシーケンスの最後のバイトはバイトシーケンスの長さをパディングし、残りのバイトはランダムデータをパディングする.
3.初期ベクトル
対称暗号化アルゴリズムの理解方法
私たちはBase 64アルゴリズムを熟知しています.Base 64アルゴリズムは符号化時に対応する文字テーブルを持っています.この文字テーブルは公開されています.文字マッピングテーブルを私たち自身が知っている鍵だけで保存すれば、対称暗号化を構成します.もちろん、対称暗号化は簡単なアルゴリズムではありません.
じっこう
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AES {
private IvParameterSpec ivSpec;
private SecretKeySpec keySpec;
public AES(String key) {
try {
byte[] keyBytes = key.getBytes();
byte[] buf = new byte[16];
for (int i = 0; i < keyBytes.length && i < buf.length; i++) {
buf[i] = keyBytes[i];
}
this.keySpec = new SecretKeySpec(buf, "AES");
this.ivSpec = new IvParameterSpec(keyBytes);
} catch (Exception e) {
e.printStackTrace();
}
}
public byte[] encrypt(byte[] origData) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, this.keySpec, this.ivSpec);
return cipher.doFinal(origData);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public byte[] decrypt(byte[] crypted) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, this.keySpec, this.ivSpec);
return cipher.doFinal(crypted);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
以上はパケット暗号化の中で現在最も流行しているAES暗号化アプリケーションで、以上は128ビットのAES、「AES/CBC/PKCS 5 Padding」、CBCモード、PKCS 5 Padding充填方式、そして私たちが設定した初期ベクトルはkey値で、設定しないとデフォルトは16個の「0」を充填します.
理論
実践部分では暗号化アルゴリズムをカプセル化した後に開発者が使用する過程を話していますが、実際に接触したばかりの開発者であれば、インターネット上でGoogle対称暗号化を行い、以上のコードを見ると愚かになるので、理論部分では対称暗号化の原理を説明します.AES 128を例に、次のいくつかの知識点を理解します.
パケット暗号化は、その名の通り、暗号化する情報を一組に分けて暗号化し、AES-128は、各パケットを128ビット、すなわち16バイトの一組に分けて暗号化する.
1.動作モード
2.充填モード
ブロック操作モードではなくフロー操作モードを使用します.ストリームモード暗号化の一例は、実行されるカウンタモードであり、ストリーム動作モードは任意のサイズのメッセージを暗号化および復号化することができるので、埋め込む必要はない.暗号化されたブロックの盗難や残留ブロックの終了など、より複雑な終了メッセージの方法は、充填の必要性を回避する.
暗号化する前に、明文を16バイトの明文のグループに分けましたが、16では割り切れない可能性が高いので、最後のグループを残して16バイトのルールを満たすためにいくつかのデータを埋め込む必要があります.そうすると、多くの埋め込みルールがあります.
AES/CBC/PKCS5Padding
実践編ではPKCS 5 Paddingパディングモードが指定されています
を選択します.
説明する
None
塗りつぶしなし
PKCS7
パディング文字列は、1つのバイトシーケンスからなり、各バイトはそのバイトシーケンスの長さをパディングします.PKCS#5パディングは、PKCS#7パディングと同じであるが、64ビット(8バイト)のブロックサイズを使用するブロックパスワードとしてのみ定義される.実際には両者を交換して使用することができます.
Zeros
塗りつぶし文字列は、ゼロに設定されたバイトで構成されます.
ANSIX923
ANSIX 923パディング文字列は、バイトシーケンスの最後のバイトがバイトシーケンスの長さをパディングし、残りのバイトは数値ゼロをパディングします.
ISO10126
ISO 10126パディング文字列は1バイトシーケンスからなり、このバイトシーケンスの最後のバイトはバイトシーケンスの長さをパディングし、残りのバイトはランダムデータをパディングする.
3.初期ベクトル