Java:

1. 生成签名:

package com.sign.demo3;

import org.apache.commons.codec.binary.Base64;

import java.nio.charset.StandardCharsets;

import java.security.*;

import java.security.spec.InvalidKeySpecException;

import java.security.spec.PKCS8EncodedKeySpec;

public class sign {

private final static String PRIVATEKEY = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCJTUlwC3FX5jvPKTheJNAOnS6RzMi4Hogh+W9qXc2sUO4XwSCHgJ/rY5C326ASAfB6RjyecGWEZKQyqunMWDBsJJ7DON6dbh9JhPd4IO6zK/uKXGugy0vZ9LH4hKUuIzhNCNygnu2I3lyzCN7eyWe+b5ZUfEp9yaHB12QqOt4FXbWmSL7mFfM88cqM7ctmYCLoR1JbvUsX8RzJmOh3WAx2Qx5bFgHidIhGk0dv+61Atk/JFVkooz9m2gJ6kw7l33SenS9lghMOfKgxH4RvUxf0m5HQqFV4zVcwoJvLWB2hZ/bGgIaT4o71qHzeuIp3x1Djhxs4Dv0g9/Lvy0j+6q95AgMBAAECggEAezvZPC2pD6Hf8LIom6ci7tr5X3eUeF0/Bm9hJvEGlzEUYlG/Jp+16Yo17C+93ivLcZP0+KgdFdVW4vswWW6WF5pOvR4gAOFER7KGg1XbqQlC/g6xs2KEtB3CVzKHJ4AJGmtnyuqafIxIW5EMqJ3Q9cYmAbKFEZ2WB+uRRa4MdHc09ExoFLGkU3iA1GjScTpo4G/VbSoj2pCRrWGgA+sZ8tTfc2kqeEKpsPL/4rpI/MNYQha54CSKN7A1YykgLfa4T5Jjkkmu5VjE/iK1/Y+O7+EL8RK2/XjWDkHznQaHhurr+cFTYt+VRYo0eChWFmg2daoNx88LMkJ6ShnjDr3NWQKBgQC76kgHKZqiubcxU9m2SewGGPI+I+VdKiybKMX8Rc0swmGM0Eera737gy0NvWRTauUDIcSb5FqC7+Zo9Ql51Zcuo/rUkrLskmm8ZpvCsd7tgoSYJjoeqO/p8ZNpMCmTtgFqYSmQZEZL0ds9RmIJ55cSCHQRSeODbsHMLwdDPXu4CwKBgQC7DHerA7xW3t0G24A2G9B/rXGV/mo1TOTttXS6ZgzayPoCPkjS+uzj+zdthhX0g3KyjDcARtvYQZn8KSGR1GA8Ih9KTwEbgRAZcxLERZTFCQDyFXaqZz2r4scsOMMyIZClmbCgrL8xEt2YTFrufFUzLNtnXu3zFGEUBxYdnq61CwKBgDjHT0Aqx/iHGN0kstGrgE9PVlKEUhdWWOgA5+GTzazKhuMfQ6h+A4dtWT2fjiLOV6gcmeVomBicGAh6kYRojyeekHmOYdWtX5l3f3TSfcNR/nJiiokdDnCnd5z+2nExOzhDZ2WjhsH+BLp8+752ZWUjfL6EjuP1oUTqqM0eVLWFAoGAfOx0t/jEvtgVklDjLkAhXkR+igji8joq4z+/eAZUK4LyxrDGfnIr6I+Nk05sN2PbJLhUu5CXn7UgnLLzwquuojq/3ycovC/Uisq6C+/UzkuXIBeJq4FMRRIup7A5Xa/hJViiCI2XG7VX3jGQwZq0ZHtfBYj3LtO7il65PIsQb8UCgYAX7UlsIGPtjFR30RRP6RXoJs/XUnVs8khlPVN5xwYXf1HVlgAs/yMso7s1V5eyCqOAh6vqNJ3dM94sHTSF/9MY68hUQbkGykhdkqriZSmpQrWLZ4lj4xuk/8IeFzvrjYk2TKWGT30He87A0Jh0muc+uKIgVKi3QfoWi4fzsc4MWw==";

public static void main(String[] args) throws NoSuchAlgorithmException, SignatureException, InvalidKeySpecException, InvalidKeyException {

String data = "hello";

byte[] keyBytes = Base64.decodeBase64(PRIVATEKEY.getBytes(StandardCharsets.UTF_8));

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

Signature signature = Signature.getInstance("SHA256withRSA");

signature.initSign(privateKey);

signature.update(data.getBytes(StandardCharsets.UTF_8));

System.out.println(Base64.encodeBase64String(signature.sign()));

}

}

2. 验证签名:

package com.sign.demo3;

import org.apache.commons.codec.binary.Base64;

import java.nio.charset.StandardCharsets;

import java.security.*;

import java.security.spec.InvalidKeySpecException;

import java.security.spec.X509EncodedKeySpec;

public class verify {

private static final String PUBLICKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiU1JcAtxV+Y7zyk4XiTQDp0ukczIuB6IIflval3NrFDuF8Egh4Cf62OQt9ugEgHwekY8nnBlhGSkMqrpzFgwbCSewzjenW4fSYT3eCDusyv7ilxroMtL2fSx+ISlLiM4TQjcoJ7tiN5cswje3slnvm+WVHxKfcmhwddkKjreBV21pki+5hXzPPHKjO3LZmAi6EdSW71LF/EcyZjod1gMdkMeWxYB4nSIRpNHb/utQLZPyRVZKKM/ZtoCepMO5d90np0vZYITDnyoMR+Eb1MX9JuR0KhVeM1XMKCby1gdoWf2xoCGk+KO9ah83riKd8dQ44cbOA79IPfy78tI/uqveQIDAQAB";

public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeySpecException, InvalidKeyException, SignatureException {

String data = "hello";

String encrypt = "aaWR/XRf5OPr25mEIvV/YWB5bLUxGyvUuiN7QQmjB2ZWW6Kai44mFzMybEnH4w5fIlbGHtg7z0cTqkGEct04gdPrwwgy6pfg+4Oy6sBvuv4cFcfe827rJdI1G8sEus9EwwkyKrAE5au9VybBq1/n/Y3f0F0O8pIj26p9KtBK187jch0ezubMLhRmxdCIlS5CadGxDEvtwNHMophPO9UOrV5FMv46sD64SdA/PK+9rL53mCaszyGUgCBD7kPPi3mDPrV1xwiImASYkzqpgE8V/o39bWhb0+lE3GxqZVjE5el64ApqW7rOrUOaQevE8iEDyo4x1lC4S3Q/4FZs/EMjYA==";

byte[] keyBytes = Base64.decodeBase64(PUBLICKEY);

X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PublicKey publicKey = keyFactory.generatePublic(keySpec);

Signature signature = Signature.getInstance("SHA256withRSA");

signature.initVerify(publicKey);

signature.update(data.getBytes(StandardCharsets.UTF_8));

System.out.println(signature.verify(Base64.decodeBase64(encrypt)));

}

}

PHP

1. 生成签名

function format($key) {

return '-----BEGIN RSA PRIVATE KEY-----' . PHP_EOL .

wordwrap($key, 64, "\n", true) .

PHP_EOL . '-----END RSA PRIVATE KEY-----';

}

$privateKey = 'MIIEowIBAAKCAQEAu92VMujU1Ioira8UcluIUdIkD14Gpt37f2YKdn/aht8Ni2xr2ub61gaeYeY/TQfveuGA5ga4tXjRYWBhdfFt6OQ1XgEAB9lYhXolR0lepGP0sOjSVUjd+2w72ZPqlzZW9OAce/rr46jC6vfK/Caql53AGelZGXkWzLT/Jk83sjKzyRsAjluNxCKkBXuKPg9AfxV2Aerkk+DzIGWPjqIN1GvgDhxUHJ/xUmO7E9idVZGu8lHYGL00cEfcwfWGwHxumKnz9LLc93kc3jyIA2yPrD9BkLvNMzaVYyVxRq+rrusosuIutG0qwS4B3eRmxUciFUlg1w+e8vZQu3VZlZGCBwIDAQABAoIBADdmKl8u5cQfUAajwIXQlCx8qYGWmqOOhmGVN7SmE0z+bcIVoOCWiJWgsgfwm+4dTvOPmDE8/i8Vh7kNcPAU1/J7iXlFFjs6Tq5dzKxu6GfVygx5O71GlZ9U1Xld8ynQLmhbxkqRPgqOc5xSohslU90N+d4qP8oROTX4kd08MxJq+9wJ6Sq5QHVrKW/P2fjNtRTGDXzHYrhqGIFn3ZtypbklGOYDEwqYDT4zPYBjOXaxFMkomX+bmDdjPzW9i+1erRsRi0QFJwot767FFE+ANknBZcbckYjQWb/K0fyHTJOnAnTcCo2T86sZV9y8/3V4gB9I2+dLAwNlDDfSiqdIztECgYEA3c5o217i7mKCmN2s+u12gXCLDNI8tQ0obDClSq/ofQSlLUIfhZeCnDRZ7XP6RDucutKtevyByqS4bVLYT5e7B5M91ABtl8gNXnwfc15CM4sBA8/hd/7Bk9fOGv7hMyuzhz08eJkRWWPajQI+QEKxZz9OataiMg5c36XgYy79cGMCgYEA2NOzlh2pl5Vlqyi+WV3mek01J1Bp+Spot/Rvc9nSAMXiK7+QEPfkuDJ1NYH5nHJ9FKCJpndTjPAnaqb6OQ32l/u3psFfUzw6/629j0yX1Lm9abOTTOT0Izb7AzUqQPHNw5WC9egWoOv583dPMsvq4hMWEuc/RVV1Oy+4YIh/Dw0CgYBqKOuo6z5ECGQnVBoBs3v/seTriwhBQ33wYkwKdi0ZAQspoTdDEmQR7UCJVPQYikuWY1Viws5ANhyLPpaHacC7fG6gNGA/wCEd8tx+tEONNd+TeoCYlRcDcsuTwh/5BNaVSOrTcbeLCC7HRKaUzRbpqrQWkInq2VL8PAEsl4X3rwKBgQCDPYCR+FpSegcT1pGAnimHFXx6012Rh23jCnz7bniCJ0SCnmyhGKrEIyZ2wLlJTLMQ7SrkK43S3Pm+wFrsddswmxfKQ3ljdC1x3MPEHOQ5ykMv25XpERwExJ6ijmeI79NP8wtVtKkdtjeQekLhyDPfqxXNU1MksFlI/dVn+LaPcQKBgBPe7+NFNx3xqCsLxiujWIci0lt38TlxM/lVPLXzFc+MaD9WaJGaSeR+ATjeO2jgUggyrz/2W+URurj436T0V16eQED+SguB+dggewRrMpkQ/IGLW6fxam8cNBC/U7cxwLBLoXA34clgBs1AR1NgGwKgRChHtSJtjhi6qog+F8vQ';

$data = 'hello';

openssl_sign($data,$sign,format($privateKey),OPENSSL_ALGO_SHA256);

echo base64_encode($sign).PHP_EOL;

2. 验证签名

function format($key) {

return '-----BEGIN PUBLIC KEY-----' . PHP_EOL .

wordwrap($key, 64, "\n", true) .

PHP_EOL . '-----END PUBLIC KEY-----';

}

$data = 'hello';

$sign = 'aaWR/XRf5OPr25mEIvV/YWB5bLUxGyvUuiN7QQmjB2ZWW6Kai44mFzMybEnH4w5fIlbGHtg7z0cTqkGEct04gdPrwwgy6pfg+4Oy6sBvuv4cFcfe827rJdI1G8sEus9EwwkyKrAE5au9VybBq1/n/Y3f0F0O8pIj26p9KtBK187jch0ezubMLhRmxdCIlS5CadGxDEvtwNHMophPO9UOrV5FMv46sD64SdA/PK+9rL53mCaszyGUgCBD7kPPi3mDPrV1xwiImASYkzqpgE8V/o39bWhb0+lE3GxqZVjE5el64ApqW7rOrUOaQevE8iEDyo4x1lC4S3Q/4FZs/EMjYA==';

$publicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiU1JcAtxV+Y7zyk4XiTQDp0ukczIuB6IIflval3NrFDuF8Egh4Cf62OQt9ugEgHwekY8nnBlhGSkMqrpzFgwbCSewzjenW4fSYT3eCDusyv7ilxroMtL2fSx+ISlLiM4TQjcoJ7tiN5cswje3slnvm+WVHxKfcmhwddkKjreBV21pki+5hXzPPHKjO3LZmAi6EdSW71LF/EcyZjod1gMdkMeWxYB4nSIRpNHb/utQLZPyRVZKKM/ZtoCepMO5d90np0vZYITDnyoMR+Eb1MX9JuR0KhVeM1XMKCby1gdoWf2xoCGk+KO9ah83riKd8dQ44cbOA79IPfy78tI/uqveQIDAQAB';

$result = openssl_verify($data,base64_decode($sign),format($publicKey),OPENSSL_ALGO_SHA256);

var_dump($result);

php 签名 验签 pkcs8,PHP和Java的RSA签名和验签相关推荐

  1. Java 实现RSA签名和加密

    Java 实现RSA签名和加密 RSA在1977年发明,是公钥加密方式的事实标准,名称有其三位作者首字母组成.本文我们介绍Java中如何使用RSA实现加密和签名. RSA属于非对称加密算法,有两个密钥 ...

  2. java基础-RSA签名验签

    一.介绍 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私钥.两者之 ...

  3. Java 实现RSA 签名/验签与加密解密

    文章目录 一.前言 二.签名与验签 1.程序代码如下: 2.程序运行结果: 三.加密解密 1.添加加解密方法 2.程序运行结果 一.前言 RSA 算法相比于AES算法不同的是RSA的秘钥为不同的两个一 ...

  4. java/php/c#版rsa签名以及java验签实现--转

    在开放平台领域,需要给isv提供sdk,签名是Sdk中需要提供的功能之一.由于isv使用的开发语言不是单一的,因此sdk需要提供多种语言的版本.譬如java.php.c#.另外,在电子商务尤其是支付领 ...

  5. Java 实现 RSA 非对称加密算法-加解密和签名验签

    1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...

  6. C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通

    文章目录 准备 C++ Java RSASignature.java RSAEncrypt.java Base64.java 准备 配置OpenSSL环境 配置VS2015环境 生成公私秘钥 然后你们 ...

  7. Windows gmssl生成SM2证书 + java bc库签名验签

    Windows gmssl生成SM2证书 + java bc库签名验签 openssl生成SM2证书 1 生成密钥 gmssl ecparam -genkey -name sm2p256v1 -tex ...

  8. 【可食用】KeyTool生成KeyStore,证书、公钥、私钥文档JAVA生成,JAVA实现ECC签名验签

    KeyTool生成KeyStore,证书.公钥.私钥文档JAVA生成,JAVA实现ECC签名验签 一.首先我们可以写个工具类生成密钥对.证书.公钥.私钥文本 jksAndCerGenerator.ja ...

  9. ECDSA数字签名算法(java实现ECDSA签名验签)

    一.ECDSA概述 椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟.ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准.它在 ...

  10. java支付宝rsa2签名,使用支付宝SDK进行RSAj加签验签以及加密解密

    /** * 支付宝 sdk 加签验签测试 * * @author 码农猿 */ public class SignDemo { /** * 公钥 */ private static final Str ...

最新文章

  1. Xshell关闭导致jar服务终止,使Jar在CentOS后台运行
  2. 在 IntelliJ IDEA 中与小姐姐连麦写代码是什么体验?
  3. salesforce学习框架图
  4. react 合并数组_React快速上手
  5. sqlserver启用xm_cmdshell
  6. 转 JavaScript传值及.Net传值方式总结
  7. linunx 定位最耗资源的进程
  8. UnixLinux大学教程目录
  9. Blend_技巧篇_淡入淡出
  10. CSDN 总部落户长沙,共建中国开发者产业中心城市!
  11. 使用Mave构建多模块项目
  12. Altium Designer10.1051图文安装教程
  13. AC A2C A3C
  14. exePath must be specified when not running inside a stand alone exe
  15. Word转为PDF,并在线预览。
  16. 后盾网php微博系统,后盾网ThinkPHP微博项目开发视频教程 - 轻松自学网
  17. 网线制作IP组网(基于华为eNSP模拟器)
  18. 血仍未冷——写在37岁生日
  19. GetDC和BeginPaint
  20. 解决“the database principal owns a schema in the database and cannot be dropped“问题

热门文章

  1. 人人商城商品分享码添加用户的头像和昵称
  2. 人生的镜像-菌群人生,从出生到死亡的菌群演替
  3. python三级菜单
  4. 在努力的途中 忤逆满路荆棘
  5. 申请一个微信小程序有哪些需要注意的事项
  6. 科技助力精准扶贫:高德地图的河南公益行
  7. [ 代码审计篇 ] 代码审计思路 详解
  8. 【转】浅谈半导体工艺变革
  9. 数据库防火墙:数据库防火墙的阻断方式
  10. 切线空间(Tangent Space) 的计算与应用