记. RSA签名验证问题

本文记录了一次在RSA签名验证中遇到的问题,即在公钥(Base64编码字符串)末尾添加任意字符仍能通过验证。通过排查,发现由于RSA公钥的指数通常为65537(Base64编码为AQAB),附加字符未破坏公钥结构。解决方案包括检查公钥的模数和指数等特性,但目前缺乏直接验证公钥完整性的有效方法。
摘要由CSDN通过智能技术生成

一、需求

  1. 要求对用户上传的文件做完整性校验,防止文件被篡改。

二、设计

  1. 约束:文件以ZIP压缩格式上传,压缩包内包含一个原文件,外加一个签名文件。
  2. 签名:使用RSA2048位私钥对原文件的hash值进行签名生成签名文件。
  3. 校验:使用配对的公钥对原文件的hash值与签名文件进行验签。

三、实现

import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;

public class SignatureUtil {

    // 加密算法
    public static final String KEY_ALGORITHM = "RSA";
	
    // 签名算法
    public static final String SIGN_ALGORITHM = "SHA256withRSA";

     /**
      * 验签
      * 
      * @param plainText 原始字符串
      * @param publicKey 公钥
      * @param sign 签名
      * @return 是否验签通过
      */
     public static boolean verify(String plainText, PublicKey pub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值