Androidデータ暗号化のBase 64符号化アルゴリズムの簡単な実装
前の学習では、通常の開発で出会った様々なデータ暗号化方式をまとめましたが、最終的には暗号化されたバイナリデータをBase 64符号化し、二次暗号化の効果があります。Base 64は厳密には暗号化アルゴリズムではなく、一種の符号化アルゴリズムです。なぜBase 64符号化を使うのですか?どんな問題を解決しましたか?これも本文で検討したものですか?
何のBase 64アルゴリズムですか?
Base 64は、ネットワーク上で最も一般的な8 Bitバイトコードを伝送するための符号化方式の一つであり、Base 64は安全領域の暗号化アルゴリズムではなく、Base 64は符号化アルゴリズムとしてのみ計算され、データコンテンツを符号化して伝送に適している。標準Base 64符号化復号は、追加の情報を必要とせずに完全に可逆的であっても、独自のカスタム文字セットを設計して、データ暗号化に使用しても、多くのシーンで解読しやすい。Base 64符号化は本質的に、バイナリデータをテキストデータに変換するスキームである。非バイナリデータについては、まずバイナリ形式に変換し、その後、6ビット連続(2の6乗=64)ごとに10進数の値を計算し、その値に基づいてA−Z、a−z、0−9、+、/の64文字の中に対応する文字を見つけ、最終的にテキスト文字列を得る。基本的なルールは以下の通りです。
標準Base64は64文字(英字、数字、+、/)だけでなく、サフィックス等号として使用されます。Base 64は3バイトを4つの印刷可能文字に変更するので、Base 64符号化後の文字列は必ず4で割り切れる(拡張子としての等号を除く)。等号は必ずサフィックスとして使用され、数は必ず0個、1個または2個である。これは原文の長さが3で割り切れないなら、Base 64は後に\0を加えて3 n位にそろえるからです。正しく還元するために、いくつかの\0を追加していくつかの等号を付けます。明らかに等号を追加する数は0、1または2だけです。厳密にはBase 64は暗号化とは言えません。
下の図はBase 64符号表です。
Base 64コードの用途は?
コンピュータ内のどのデータもasciiコードで記憶されていますが、asciiコードの128〜255の間の値は非可視文字です。ネットワーク上でデータを交換する場合、例えばAからBへと、複数のルーティング装置を介して、異なるデバイスの文字に対する処理方法が異なるため、これらの見えない文字はエラー処理される可能性があり、これは転送に不利である。データをまずBase 64符号化して、すべて可視文字にすると、エラーの可能性が大きく低下します。
Base 64の具体的な実現
1)文字列はBase 64符号化されます。
符号化であれ、復号であれ、一つのパラメータFragsがあります。Androidは以下のような種類を提供しています。
DEFAULTというパラメータはデフォルトです。デフォルトの方法で暗号化します。
NOの_PADDINGというパラメータは文字列の最後の暗号化を省略します。
NOの_WRAPというパラメータは、すべての改行符を省略するという意味です。
CRLFというパラメータは見覚えがあります。Winスタイルの改行符です。つまり、CR LFというペアを使って、UnixスタイルのLFではなく、行の終端として使います。
URL_SAFEというパラメータは、暗号化時にURLやファイル名に特別な意味を持つ文字を暗号化文字として使用しないという意味です。+と/を置き換える
まとめ:
Base 64符号化は簡単に見えるが、実際の開発ではかなり広く使われている。今のプロジェクトではこんなに多くのものを使うだけです。これからもっと複雑な状況を使う時に補充します。
以上は、皆さんが持ってきたAndroidデータ暗号化のBase 64符号化アルゴリズムの簡単な実装です。どうぞよろしくお願いします。
何のBase 64アルゴリズムですか?
Base 64は、ネットワーク上で最も一般的な8 Bitバイトコードを伝送するための符号化方式の一つであり、Base 64は安全領域の暗号化アルゴリズムではなく、Base 64は符号化アルゴリズムとしてのみ計算され、データコンテンツを符号化して伝送に適している。標準Base 64符号化復号は、追加の情報を必要とせずに完全に可逆的であっても、独自のカスタム文字セットを設計して、データ暗号化に使用しても、多くのシーンで解読しやすい。Base 64符号化は本質的に、バイナリデータをテキストデータに変換するスキームである。非バイナリデータについては、まずバイナリ形式に変換し、その後、6ビット連続(2の6乗=64)ごとに10進数の値を計算し、その値に基づいてA−Z、a−z、0−9、+、/の64文字の中に対応する文字を見つけ、最終的にテキスト文字列を得る。基本的なルールは以下の通りです。
標準Base64は64文字(英字、数字、+、/)だけでなく、サフィックス等号として使用されます。Base 64は3バイトを4つの印刷可能文字に変更するので、Base 64符号化後の文字列は必ず4で割り切れる(拡張子としての等号を除く)。等号は必ずサフィックスとして使用され、数は必ず0個、1個または2個である。これは原文の長さが3で割り切れないなら、Base 64は後に\0を加えて3 n位にそろえるからです。正しく還元するために、いくつかの\0を追加していくつかの等号を付けます。明らかに等号を追加する数は0、1または2だけです。厳密にはBase 64は暗号化とは言えません。
下の図はBase 64符号表です。
Base 64コードの用途は?
コンピュータ内のどのデータもasciiコードで記憶されていますが、asciiコードの128〜255の間の値は非可視文字です。ネットワーク上でデータを交換する場合、例えばAからBへと、複数のルーティング装置を介して、異なるデバイスの文字に対する処理方法が異なるため、これらの見えない文字はエラー処理される可能性があり、これは転送に不利である。データをまずBase 64符号化して、すべて可視文字にすると、エラーの可能性が大きく低下します。
Base 64の具体的な実現
1)文字列はBase 64符号化されます。
String encodedString = Base64.encodeToString("whoislcj".getBytes(), Base64.DEFAULT);
Log.e("Base64", "Base64---->" + encodedString);
2)文字列はBase 64で復号されます。
String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));
Log.e("Base64", "Base64---->" + decodedString);
3.)ファイルをBase 64符号化する
File file = new File("/storage/emulated/0/pimsecure_debug.txt");
FileInputStream inputFile = null;
try {
inputFile = new FileInputStream(file);
byte[] buffer = new byte[(int) file.length()];
inputFile.read(buffer);
inputFile.close();
encodedString = Base64.encodeToString(buffer, Base64.DEFAULT);
Log.e("Base64", "Base64---->" + encodedString);
} catch (Exception e) {
e.printStackTrace();
}
4.)ファイルをBase 64で復号する
File desFile = new File("/storage/emulated/0/pimsecure_debug_1.txt");
FileOutputStream fos = null;
try {
byte[] decodeBytes = Base64.decode(encodedString.getBytes(), Base64.DEFAULT);
fos = new FileOutputStream(desFile);
fos.write(decodeBytes);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
5)Base 64.DEFAULTパラメータについて説明する。符号化であれ、復号であれ、一つのパラメータFragsがあります。Androidは以下のような種類を提供しています。
DEFAULTというパラメータはデフォルトです。デフォルトの方法で暗号化します。
NOの_PADDINGというパラメータは文字列の最後の暗号化を省略します。
NOの_WRAPというパラメータは、すべての改行符を省略するという意味です。
CRLFというパラメータは見覚えがあります。Winスタイルの改行符です。つまり、CR LFというペアを使って、UnixスタイルのLFではなく、行の終端として使います。
URL_SAFEというパラメータは、暗号化時にURLやファイル名に特別な意味を持つ文字を暗号化文字として使用しないという意味です。+と/を置き換える
まとめ:
Base 64符号化は簡単に見えるが、実際の開発ではかなり広く使われている。今のプロジェクトではこんなに多くのものを使うだけです。これからもっと複雑な状況を使う時に補充します。
以上は、皆さんが持ってきたAndroidデータ暗号化のBase 64符号化アルゴリズムの簡単な実装です。どうぞよろしくお願いします。