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'로 해도 상관없나요?