RSA1、RSA256 签名

  public static String MakeSign(String Data) {

     try {
byte[] data = Data.getBytes();
byte[] keyBytes = base64String2Byte(PrivateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec);
    
Signature signature = Signature.getInstance("SHA256withRSA");//这个根据需求填充SHA1WithRSA或SHA256WithRSA
signature.initSign(priKey);
signature.update(data); return byte2Base64String(signature.sign());
} catch (Exception e) {
return "";
}
}
 // base64字符串转字节数组
public static byte[] base64String2Byte(String base64Str) {
return Base64.decodeBase64(base64Str);
}

RSA1、RSA256 验签

     public static boolean VeriSign(String Data_ori, String Singnature) {
  try {
  byte[] signed = base64String2Byte(Singnature);   X509EncodedKeySpec keySpec = new X509EncodedKeySpec(base64String2Byte(PublicKey));
  KeyFactory keyFactory = null;
  keyFactory = KeyFactory.getInstance("RSA");
  PublicKey publicKey = keyFactory.generatePublic(keySpec);   Signature signature2 = Signature.getInstance("Sha256WithRSA");//这个根据需求填充SHA1WithRSA或SHA256WithRSA
  signature2.initVerify(publicKey);
  signature2.update(Data_ori.getBytes("UTF-8"));
  boolean verify = signature2.verify(signed);
  return verify;
  } catch (Exception e) {
  return false;
  }
}

SHA256withECDSA验签

  public static boolean verifySign(String _data, String _key, String _sign) {

         try {
java.security.spec.X509EncodedKeySpec bobPubKeySpec = new java.security.spec.X509EncodedKeySpec(
new BASE64Decoder().decodeBuffer(_key));
KeyFactory keyf = KeyFactory.getInstance("EC"); //ECC 可根据需求更改
PublicKey publicKey = keyf.generatePublic(bobPubKeySpec); byte[] data = hexStringToBytes(_data);
byte[] sig = hexStringToBytes(_sign); Signature signer = Signature.getInstance("SHA256withECDSA");
signer.initVerify(publicKey);
signer.update(data);
return (signer.verify(sig));
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
return false;
}
  public static String bytesToHexString(byte[] src) {
StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
} public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return new byte[0];
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
} public static byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}

HEX和Byte[]互转

Java 签名(SHA1WithRSA、SHA256WithRSA、SHA256withECDSA)的更多相关文章

  1. java 签名类 Signature

    java.security类 Signature java.lang.Object java.security.SignatureSpi java.security.Signature public ...

  2. Java签名

    有的时候会忘记签名,想想还是在博客里面记录下,,省的我忘了还要去翻文档,哈哈: 除了boolean, long,类型其他的基本类型都是首字母大写: Java类型 类型描述符 boolean  Z ch ...

  3. java签名证书

    import java.io.FileInputStream; import java.security.KeyStore; import java.security.PrivateKey; impo ...

  4. java签名与验签

    基本概念: 加密解密 加密:发送方利用接收方的公钥对要发送的明文进行加密. 解密:接收方利用自己的私钥进行解密. 公钥和私钥配对的,用公钥加密的文件,只有对应的私钥才能解密.当然也可以反过来,用私钥加 ...

  5. Java 签名验签工具类

    public class SignatureUtil { private static final String CHARSET = "UTF-8"; private static ...

  6. 支付宝ios支付请求Java服务端签名报的一个错(ALI40247) 原创

    今天做app的支付宝支付,遇到些问题,以前做支付宝支付签名都是直接在客户端App进行,今天下了最新版本ios的支付宝支付demo,运行demo时底部有红色的显眼字体,告知用户签名必须在服务端进行... ...

  7. RSA加密和数字签名在Java中常见应用【原创】

    相关术语解释: RSA,参考: https://en.wikipedia.org/wiki/RSA_(cryptosystem) 非对称加密算法 ,参考:https://baike.baidu.com ...

  8. Java安全笔记

    前言 后端接口开发中,涉及到用户私密信息(用户名.密码)等,我们不能传输明文,必须使用加密方式传输.这次政府项目中,安全测试组提出了明文传输漏洞,抽空研究了下Java加解密相关知识,记录下. 散列函数 ...

  9. Java加密与安全

    数据安全   什么是数据安全?假如Bob要给Alice发送一封邮件,在发送邮件的过程中,黑客可能会窃取到邮件的内容,所以我们需要防窃听:黑客也有可能会篡改邮件的内容,所以Alice必须要有能有去识别邮 ...

随机推荐

  1. ping IP 带时间戳循环显示并写入日志(windos版+linux版)

    在工作中,判断网络是否通畅,首选命令就是ping,但有时候我们需要持续ping一个或多个地址时,需要加 -t 即可,但有时候需要在ping的时候加入时间戳并把ping记录写入到日志里面,方法如下: w ...

  2. Android笔记(四) Activity之间的数据传递

    我们之前使用Intent进行Activity之间的跳转,其实Intent还可以在启动活动的时候传递数据. Intent提供了一系列的putExtra方法以便我们把想要传递的数据暂存在Intent中,待 ...

  3. JAVA笔记整理(二),下载安装JDK

    Windows平台 1.登录Oracle官方网站(http://www.oracle.com/index.html),找到下载 2.选择要下载的版本,点击JDK DOWNLOAD 3.下载文件,先勾选 ...

  4. Linux三剑客及使用介绍

    Linux 三剑客是(grep,sed,awk)三者的简称,熟练使用这三个工具可以提升运维效率.Linux 三剑客以正则表达式作为基础,而在Linux系统中,支持两种正则表达式,分别为"标准 ...

  5. 记一个VS连接过程中找不到cpp的解决方法

    在新增几个qt页面时,发现原来没动的几个cpp 连接报错了,错误均是qt的相关文件找不到 应该是moc文件没有生产或者没有被包含进工程.我想着既然我没动,应该不会是moc的原因,就在其他方向解决了很久 ...

  6. Java类与类之间的6种关系及uml表示

    一.继承关系 继承指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功能的能力.在Java中继承关系通过关键字extends明确标识,在设计时一般没有争议 ...

  7. PL/SQL复合类型

    一.PL/SQL记录:一条记录. 可简化单行多列的数据的处理.当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量. 1.当使用自定义的 ...

  8. 突然萌发关于 redis 的想法(2)

    接着上篇的说.. 上一篇 : 突然萌发关于 Redis 的想法(1) 今天写商城的时候突然发现,其实商城这种 频繁操作,频繁更新, 等操作,都只需要全部存储在 Redis 中就行了, 可能有部分数据会 ...

  9. vs编译自定义编译任务记录,msbuild

    https://www.cnblogs.com/whitewolf/archive/2011/07/27/2119005.html http://www.cnblogs.com/hjf1223/arc ...

  10. 06_Tutorial 6: ViewSets & Routers 视图集与路由器

    1.Tutorial 6: ViewSets & Routers 视图集与路由器 0.文档 https://q1mi.github.io/Django-REST-framework-docum ...