java代码签名工具下载_Java数字签名工具类

package com.example.mydemo.util;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import sun.misc.BASE64Decoder;

import java.io.InputStream;

import java.security.*;

import java.security.interfaces.RSAPrivateKey;

import java.security.interfaces.RSAPublicKey;

import java.security.spec.PKCS8EncodedKeySpec;

import java.security.spec.X509EncodedKeySpec;

import java.util.Base64;/**

* 加密工具类*/

public classEncryptionUtil {static Logger logger = LoggerFactory.getLogger(EncryptionUtil.class);/**

* 签名算法*/

private static String signatureKey = "MD5withRSA";/**

* 加密算法*/

private static String algorithm = "RSA";/**

* 根据公钥字符串生成公钥对象

*

* @param publicKeyStr

* @param algorithm RSA 加密算法*/

private staticPublicKey generatePublicKeyByStr(String publicKeyStr, String algorithm) throws Exception {

KeyFactory keyFactory=KeyFactory.getInstance(algorithm);

BASE64Decoder base64Decoder= newBASE64Decoder();byte[] buffer =base64Decoder.decodeBuffer(publicKeyStr);

X509EncodedKeySpec keySpec= newX509EncodedKeySpec(buffer);

RSAPublicKey rsaPublicKey=(RSAPublicKey) keyFactory.generatePublic(keySpec);returnrsaPublicKey;

}/**

* 根据私钥字符串生成私钥对象

*

* @param privateKeyStr 私钥字符串

* @param algorithm 加密算法

* @return

* @throws Exception*/

private staticPrivateKey generatePrivateKeyByStr(String privateKeyStr, String algorithm) throws Exception {

KeyFactory keyFactory=KeyFactory.getInstance(algorithm);

BASE64Decoder base64Decoder= newBASE64Decoder();byte[] buffer =base64Decoder.decodeBuffer(privateKeyStr);

PKCS8EncodedKeySpec keySpec= newPKCS8EncodedKeySpec(buffer);

RSAPrivateKey rsaPrivateKey=(RSAPrivateKey) keyFactory.generatePrivate(keySpec);returnrsaPrivateKey;

}/**

* 根据字符串生成私钥签名

*

* @param string 要签名的内容

* @param privateKeyStr 私钥字符串

* @return

* @throws Exception*/

public static String sign(String string, String privateKeyStr) throws Exception {

PrivateKey privateKey=generatePrivateKeyByStr(privateKeyStr, algorithm);

Signature signature=Signature.getInstance(signatureKey);

signature.initSign(privateKey);

signature.update(string.getBytes());byte[] result =signature.sign();returnBase64.getEncoder().encodeToString(result);

}/**

* 根据签名和公钥字符串验证签名合法性

*

* @param sign

* @param publicKeyStr

* @param string 要签名的内容

* @return*/

public static boolean verify(String sign, String string, String publicKeyStr) {try{

PublicKey publicKey=generatePublicKeyByStr(publicKeyStr, algorithm);

Signature signature=Signature.getInstance(signatureKey);

signature.initVerify(publicKey);

signature.update(string.getBytes());//重点 一点要解密

boolean bool =signature.verify(Base64.getDecoder().decode(sign));return bool;

}catch(Exception e) {

logger.error("", e);return false;

}

}/**

* 根据问价路径读取文件内容

*

* @param filePath

* @return

* @throws Exception*/

publicString getFileByFilePath(String filePath) throws Exception {

InputStreamin = this.getClass().getClassLoader().getResourceAsStream(filePath);

StringBuilder stringBuilder= newStringBuilder();byte[] bytes = new byte[1024];int count = 0;while ((count = in.read(bytes)) != -1) {

stringBuilder.append(new String(bytes, 0, count));

}returnstringBuilder.toString();

}/**

* 生成公私钥对

*

* @throws Exception*/

public static voidgeneratePubPrivateKey() throws Exception {

Stringstring = "RSA";

KeyPairGenerator pair= KeyPairGenerator.getInstance(string);

KeyPair pp=pair.generateKeyPair();//生成私钥

PrivateKey privateKey =pp.getPrivate();//生成公钥

PublicKey publicKey =pp.getPublic();byte[] pencode =privateKey.getEncoded();byte[] pubencode =publicKey.getEncoded();

System.out.println("私钥:");

System.out.println(com.sun.org.apache.xml.internal.security.utils.Base64.encode(pencode));

System.out.println("公钥:");

System.out.println(com.sun.org.apache.xml.internal.security.utils.Base64.encode(pubencode));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值