마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 DB에 암호화 키를 저장하는 방법 질문이요~~~

0 추천
bt.setOnClickListener(new View.OnClickListener() {
 
@Override
public void onClick(View v) {
try {
 
// RSA 공개키/개인키를 생성한다.
 
KeyPairGenerator clsKeyPairGenerator = KeyPairGenerator
.getInstance("RSA");
 
clsKeyPairGenerator.initialize(2048);
 
KeyPair clsKeyPair = clsKeyPairGenerator.genKeyPair();
Key clsPublicKey = clsKeyPair.getPublic();
Key clsPrivateKey = clsKeyPair.getPrivate();
KeyFactory fact = KeyFactory.getInstance("RSA");
RSAPublicKeySpec clsPublicKeySpec = fact.getKeySpec(clsPublicKey,
RSAPublicKeySpec.class);
RSAPrivateKeySpec clsPrivateKeySpec = fact.getKeySpec(
clsPrivateKey, RSAPrivateKeySpec.class);
 
// 암호화 한다.
 
Cipher clsCipher = Cipher.getInstance("RSA");
 
byte[] pbk = clsPublicKey.getEncoded();
byte[] prk = clsPrivateKey.getEncoded();
 
// tv.setText(""+ai);
FileLockDB lock = new FileLockDB(getApplicationContext());
filesqldb = lock.getWritableDatabase();
lock.onUpgrade(filesqldb, 1, 2);
 
filesqldb.execSQL("INSERT INTO LockDB VALUES('" + pbk + "' , '"
+ prk + "');");
 
Cursor cursor = filesqldb.rawQuery("SELECT * FROM LockDB;",null);
 
while(cursor.moveToNext()){
pbd = cursor.getBlob(0);
prd = cursor.getBlob(1);
}
 
// tv2.setText(""+aw);
KeySpec keySpec = new X509EncodedKeySpec(pbd);
KeyFactory kf = KeyFactory.getInstance("RSA");
 
PublicKey key = kf.generatePublic(keySpec);
 
clsCipher.init(Cipher.ENCRYPT_MODE, key);
 
byte[] arrCipherData = clsCipher.doFinal(at.getBytes());
 
String strCipher = new String(arrCipherData);
 
tv.setText(strCipher);
 
// 복호화 한다.
 
 
 
KeySpec keySpec2 = new PKCS8EncodedKeySpec(prd);
 
PrivateKey key2 = kf.generatePrivate(keySpec2);
clsCipher.init(Cipher.DECRYPT_MODE, key2);
 
byte[] arrData = clsCipher.doFinal(arrCipherData);
 
String strResult = new String(arrData);
tv2.setText(strResult);
 
cursor.close();
filesqldb.close();
 
 
} catch (Exception e) {
 
}
}
});
==========================DB 소스==================================================
 
public class FileLockDB extends SQLiteOpenHelper {
public FileLockDB(Context context) {
super(context, "LockDB", null, 1);
// TaODO Auto-generated constructor stub
}
 
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE LockDB(PUBLICKEY mediumblob, PRIVATEKEY mediumblob PRIMARY KEY);");
// db.execSQL("INSERT INTO FilePath VALUES('a' , 'b' );");
}
 
@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) {
db.execSQL("DROP TABLE IF EXISTS LockDB");
onCreate(db);
}
 
}
 
소스코드를 이렇게 만들었는데 데이터베이스에 입력하기 전의 암호화키를 바이트 배열로 바꾼 값과 데이터베이스에서 가져온 바이트배열 값이 달라지는데 왜 그럴까요? 그리고 DB에 컬럼의 형식을 'mediumblob'로 해도 상관없나요?
호놀룰루 (120 포인트) 님이 2014년 10월 25일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...