gpt4 book ai didi

android - 如何将 android PublicKey 转换为字符串并返回?

转载 作者:行者123 更新时间:2023-12-04 16:04:28 29 4
gpt4 key购买 nike

我正在尝试创建一个将加密用户消息的应用程序。用户公钥需要作为字符串发布到服务器。我正在像这样生成 Android KyeStore PublicKey:

    public static PublicKey getOrCreatePublicKey(String alias) throws GeneralSecurityException, IOException {

KeyStore keyStore = KeyStore.getInstance(ANDROID_PROVIDER);
keyStore.load(null);
if (!keyStore.containsAlias(alias) || keyStore.getCertificate(alias) == null) {

KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(
alias,
KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_ENCRYPT)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.setDigests(KeyProperties.DIGEST_SHA256,
KeyProperties.DIGEST_SHA512)
.build();
KeyPairGenerator generator = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, ANDROID_PROVIDER);
generator.initialize(spec);
generator.generateKeyPair();
}
return keyStore.getCertificate(alias).getPublicKey();
}

然后我尝试将 PublicKey 转换为字符串并返回到 PublicKey,如下所示:
public static PublicKey stringToPublicKey(String publStr)  {

PublicKey publicKey = null;
try {
byte[] data = Base64.decode(publStr, Base64.DEFAULT);
X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
KeyFactory fact = KeyFactory.getInstance("RSA");
publicKey = fact.generatePublic(spec);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
return publicKey;
}


public static String publicKeyToString(PublicKey publ) {
String publicKeyString = null;
try {
KeyFactory fact = KeyFactory.getInstance("RSA");
X509EncodedKeySpec spec = fact.getKeySpec(publ,
X509EncodedKeySpec.class);
publicKeyString = Base64.encodeToString(spec.getEncoded(), Base64.DEFAULT);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
return publicKeyString;
}

然后我尝试使用公钥和私钥加密和解密用户消息。

如果我不转换公钥加密工作正常。但是,如果我将公钥转换为字符串并返回公钥,则加密不再起作用。
我究竟做错了什么?谢谢你。
   PublicKey publicKey1 = getOrCreatePublicKey("alias");
String publicKeyStr = publicKeyToString(publicKey1);
PublicKey publicKey2 = stringToPublicKey(publicKeyStr);

//this one works
String message = encrypt(str, publicKey1);
String decryptm = decrypt(message, privateKey);

//this one doesn't work
String message = encrypt(str, publicKey2);
String decryptm = decrypt(message, privateKey);

最佳答案

我已经换了

KeyProperties.ENCRYPTION_PADDING_RSA_OAEP

KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1 .

我也换了

密码密码 = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");



密码密码 = Cipher.getInstance("RSA/ECB/PKCS1Padding");

现在它可以工作了。但我仍然不知道为什么它第一次不起作用。

关于android - 如何将 android PublicKey 转换为字符串并返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49343149/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com