내 연락처 정보
우편메소피아@프로톤메일.com
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에서 생성된 코드에도 문제가 있습니다.