당신은 안드로이드에 SharedPreference를 사용하여 RSA 공개/개인 키를 지속 할 수는. 전화가 악의적으로 뿌리를 질렀을 때 키를 안전하게 유지하려면 다음 단계를 수행하십시오.
1 : 데이터를 암호화하려면 키 쌍을 생성하십시오.
2 : 사용자에게 암호를 묻습니다.
3 :이 암호를 사용하여 개인 키를 암호화하는 대칭 키를 생성하십시오.
4 : 공개 키를 사용하여 데이터를 암호화하고 개인 키를 사용하여 암호를 해독 할 수 있습니다.
5 단계 2에서 프롬프트 된 암호에 대한 세션을 유지할 수 있습니다.이 세션 동안 개인 키를 암호화/해독하기 위해 대칭 키 (암호에서 생성 된)를 사용할 수 있습니다.
다음 코드
다음 코드는 & 개인 키를 가져 저장하는 방법을 보여줍니다 & 공개 키
public void setPublicKey(PublicKey publicKey, String key, Context context) {
byte[] pubKey = publicKey.getEncoded();
String pubKeyString = Base64.encodeBytes(pubKey);
this.setString(key, pubKeyString, context);
}
public PublicKey getPublicKey(String key,Context context) {
PublicKey pKey = null;
try {
String pubString = this.getString(key, context);
if(pubString!=null) {
byte[] binCpk = Base64.decode(pubString);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(binCpk);
pKey = keyFactory.generatePublic(publicKeySpec);
}
}catch(Exception e){
}
return pKey;
}
가져 저장하는 방법을 보여줍니다.
public void setPrivateKey(PrivateKey privateKey, String key, Context context) {
byte[] priKey = privateKey.getEncoded();
String priKeyString = Base64.encodeBytes(priKey);
this.setString(key, priKeyString, context);
}
public PrivateKey getPrivateKey(String key, Context context) {
PrivateKey privateKey = null;
try {
String privateString = this.getString(key, context);
if(privateString!=null){
byte[] binCpk = Base64.decode(privateString);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(binCpk);
privateKey = keyFactory.generatePrivate(privateKeySpec);
}
}
catch(Exception e){
}
return privateKey;
}
@LokiSinclair @LokiSinclair @ 공개 키를 좋아하는 사람에게 공개 키를 공개하여 좋아하는 사람에게 공개 할 수 있습니다. 그래서 개인 키로 저장하는 것이 좋습니다. 개인 키는 안전한 장소에 보관하면됩니다. – Peanut
@LokiSinclair 죄송합니다.하지만 그것은 틀 렸습니다. 개인 키는 메시지를 해독 할 수 있어야하는 장치에 저장하는 것이 가장 좋습니다. 백업은 온라인으로 만들 수 있지만 보안 상 위험 할 수 있습니다. 또한 공개 키를 개인 키와 동일한 위치에 저장해도 아무런 위험이 없습니다. – joakimb