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

相关推荐
88号技师6 分钟前
2025年7月一区SCI优化算法-Logistic-Gauss Circle optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
m0_5213290312 分钟前
java-File的创建和删除
java
再睡一夏就好20 分钟前
【C++闯关笔记】unordered_map与unordered_set的底层:哈希表(哈希桶)
开发语言·c++·笔记·学习·哈希算法·散列表
potato_155425 分钟前
现代C++核心特性——内存篇
开发语言·c++·学习
lly20240627 分钟前
C# 继承
开发语言
August_._28 分钟前
【JAVA】基础(一)
java·开发语言·后端·青少年编程
沐怡旸32 分钟前
【底层机制】垃圾回收(GC)底层原理深度解析
android·面试
李白的粉1 小时前
基于springboot的新闻资讯系统
java·spring boot·毕业设计·课程设计·源代码·新闻资讯系统
软件开发技术深度爱好者1 小时前
Python类中方法种类介绍
开发语言·python
麦麦鸡腿堡1 小时前
Java_LinkedList底层结构
java·开发语言