-3
私はのEditText e
を持っていると私は、私はちょうどストアとSQLiteのAndroidの中で暗号化された値を取得
byte[] encoded = encodeData(key, e.getText.toString());
として、このメソッドを呼んでいるこの方法
byte[] encodeData(byte[] key, byte[] data)
{
try {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
return cipher.doFinal(data);
} catch(Exception e) {
Log.e("Cryptography", e.getMessage());
}
return new byte[0];
}
を使用して、そのコンテンツの価値を暗号化しています
そして
SQLiteDatabase sd = db.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put("COL_NAME", encoded);
としてSQLiteDatabseに値を格納し、それを私たちを取得します機能
byte[] decodeData(byte[] key, byte[] data)
{
try {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
return cipher.doFinal(data);
} catch(Exception e) {
Log.e("Cryptography", e.getMessage());
}
return new byte[0];
}
下にすると
SQLiteDatabase sd = db.getReadableDatabase();
Cursor cur = sd.rawQuery("select * from TABLE_NAME", null);
if(cur.moveToNext()) {
byte[] decoded = decodeData(key, cur.getBlob(0));
}
しかし、私は、それが空白表示され、この値としてのEditTextの値を設定していて、それを呼び出します。
e.setText(new String(decoded));
暗号化せずにデータを保存しても、正常に動作します。
あなたは 'e.setText(新しいString(新しいバイト[0]))やっているように、今それはそうbecuaseログを読んで、' ...また 'cur.getBlob(0)'あなたは確信していますBLOB列は最初の列ですか? – Selvin
ohhはい....私はdecodeDataメソッドで例外を受けています。最後のブロックが復号化に不完全であると言っています –