一、需求
- 要求对用户上传的文件做完整性校验,防止文件被篡改。
二、设计
- 约束:文件以ZIP压缩格式上传,压缩包内包含一个原文件,外加一个签名文件。
- 签名:使用RSA2048位私钥对原文件的hash值进行签名生成签名文件。
- 校验:使用配对的公钥对原文件的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