Androidデータ暗号化のBase 64符号化アルゴリズム

2990 ワード

注:本文は転載文です.原文は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の具体的な実現
文字列はBase 64符号化されます.
String encodedString = Base64.encodeToString("whoislcj".getBytes(), Base64.DEFAULT);
Log.e("Base64", "Base64---->" + encodedString);
文字列はBase 64で復号されます.
String decodedString =new String(Base64.decode(encodedString,Base64.DEFAULT));
Log.e("Base64", "Base64---->" + decodedString);
ファイルを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();
}
ファイルを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();
}
Base 64.DEFAULTパラメータについて説明します.
符号化も復号もパラメータFragsがあります.Androidは以下の種類を提供します.
DEFAULTというパラメータはデフォルトであり、デフォルトの方法でを暗号化する.
NOの_PADDINGというパラメータは文字列の最後の暗号化を省略することです.
NOの_WRAPというパラメータは、すべての改行を省略するという意味です.
CRLFというパラメータは見覚えがあります.Winスタイルの改行符です.つまり、CR LFというペアを使って、UnixスタイルのLF ではなく、行の終わりにします.
URLSAFEというパラメータは、暗号化時にURLとファイル名に特別な意味を持つ文字を暗号化文字として使用しないという意味であり、具体的には、−と置換+および/である.
まとめ:
Base 64符号化は簡単に見えるが、実際の開発ではかなり広く使われている.今のプロジェクトではこんなに多くのものを使うだけです.これからもっと複雑な状況を使う時に補充します.