私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
プロジェクトでは、Android フロントエンドがバックエンドから提供された公開キーを使用してデータを暗号化するシナリオによく遭遇します。Javaバックエンドに注意する必要があるjava.util.Base64
デフォルトの Base64 標準と Androidandroid.util.Base64
異なっています。
さらに、RSA アルゴリズム標準では、フロントエンドとバックエンド間の明示的な合意も必要とします。
サンプルコード:
import android.util.Base64;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.spec.X509EncodedKeySpec;
public class RSACrypto {
public static final String PUB_KEY = "xxxxxxxxxxxxxx你的后端公钥";
public static PublicKey getPublicKey() throws Exception {
byte[] keyBytes = Base64.decode(PUB_KEY, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return keyFactory.generatePublic(keySpec);
}
public static String publicEncrypt(PublicKey publicKey, String encrypted) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] data = cipher.doFinal(encrypted.getBytes(StandardCharsets.UTF_8));
return Base64.encodeToString(data, Base64.NO_WRAP);
}
}
このうち、暗号化結果はBase64.NO_WRAPでエンコードされ、公開鍵はBase64.DEFAULTでデコードされ、暗号化アルゴリズムはRSA/None/PKCS1Paddingです。 Android 用の RSA 暗号化サンプル コードはインターネット上で言及されていないものが多数ありますが、ここに記録されている GPT によって生成されたコードにも問題があります。