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

相关推荐
唐诺2 分钟前
Android USB ADB 调试方案完全解析
android·adb·usb
格林威2 小时前
多相机微秒级对齐:硬件触发 vs PTP(IEEE 1588)方案实战对比
开发语言·人工智能·数码相机·机器学习·计算机视觉·视觉检测·机器视觉
都叫我大帅哥2 小时前
给 Java 程序员的 CSRF 攻击详解:从原理到防御实战
java
江南十四行2 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
fb_123453 小时前
Linux磁盘分区从入门到实操:MBR_GPT全解析+分区工具实战指南
java·linux·gpt
初级代码游戏3 小时前
iOS开发 Swift 速记2:三种集合类型 Array Set Dictionary
开发语言·ios·swift
码智社4 小时前
JSON 零基础到资深全体系教程
java·json
寰宇星城4 小时前
AppActuator - 让 AI Agent 直接理解并操作运行中的 Android App
android
波罗丁牌5 小时前
uni-app 实现视频聊天、屏幕分享,支持Android、HarmonyOS、iOS
android·uni-app·音视频
峥嵘life5 小时前
Android WiFi 热点 Channel 信道 和 Frequency 频率 转换总结
android·开发语言