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

相关推荐
小bo波2 小时前
使用Thread子类创建线程 VS 使用Runnable接口创建线程的区别
java·多线程·thread·并发编程·runnable
SamDeepThinking2 小时前
高并发场景下,CompletableFuture与ForkJoinPool该如何取舍?
java·后端·面试
方白羽5 小时前
Android Gradle 缓存与文件目录深度解析
android·gradle·android studio
张不才5 小时前
CPU 100% 了怎么办?Java 性能排障的标准化操作
java·后端
shepherd1116 小时前
吞吐量提升 10 倍:高并发大批量数据处理任务的架构演进与性能调优
java·后端·架构
曲幽9 小时前
Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
android·termux·nohup·services·wake-lock
plainGeekDev9 小时前
单例模式 → object 声明
android·java·kotlin
程序员陆业聪10 小时前
读者点单·03|Compose 与传统 View 混用的 12 个真实坑
android
程序员陆业聪10 小时前
读者点单·02|Android 启动优化实战:Trace 抓取→Application 编排→冷启动全流程拆解
android
Coffeeee10 小时前
帮你快速理解AI Agent之我想招个Android实习生
android·人工智能·agent