Android与Java后端联调RSA加密的注意事项

项目中常常会遇到Android前端使用后端提供的公钥加密数据的场景。需要注意Java后端的java.util.Base64默认Base64标准和Android的android.util.Base64是不一样的。

此外,RSA算法标准也需要前后端显式约定。

示例代码:

java 复制代码
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生成的代码也有问题,特此记录。

相关推荐
user_admin_god3 分钟前
Spring Boot 3 + WebFlux 企业级流式SSE接口最佳实践
java·spring boot·后端
fly_over5 分钟前
AI Agent 开发实战教程(二):Prompt 工程与工具调用
开发语言·python·langchain·prompt·ai编程·ai agent
唐诺6 分钟前
Android 与 iOS 核心差异
android·ios
csbysj20207 分钟前
并查集基础
开发语言
雨落在了我的手上7 分钟前
初识java(四):程序逻辑控制
java·开发语言·前端
jllllyuz8 分钟前
VC++ 读写 Excel 文件实现
开发语言·c++·excel
Lucky_ldy8 分钟前
C语言学习:字符函数和字符串函数(内容丰富且易懂)
c语言·开发语言·学习
UXbot8 分钟前
Vibecoding 工具如何一次性生成 Web + iOS + Android 三端 APP?功能架构深度解读
android·前端·ui·ios·交互·软件构建·ai编程
她说彩礼65万8 分钟前
C# WIFI连接状态检测方法
java·spring·c#
小小编程能手9 分钟前
C++文件从操作:
开发语言·c++