php 签名 验签 pkcs8,PHP和Java的RSA签名和验签
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签名和验签相关推荐
- Java 实现RSA签名和加密
Java 实现RSA签名和加密 RSA在1977年发明,是公钥加密方式的事实标准,名称有其三位作者首字母组成.本文我们介绍Java中如何使用RSA实现加密和签名. RSA属于非对称加密算法,有两个密钥 ...
- java基础-RSA签名验签
一.介绍 RSA加密是一种非对称加密.可以在不直接传递密钥的情况下,完成解密.这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险.是由一对密钥来进行加解密的过程,分别称为公钥和私钥.两者之 ...
- Java 实现RSA 签名/验签与加密解密
文章目录 一.前言 二.签名与验签 1.程序代码如下: 2.程序运行结果: 三.加密解密 1.添加加解密方法 2.程序运行结果 一.前言 RSA 算法相比于AES算法不同的是RSA的秘钥为不同的两个一 ...
- java/php/c#版rsa签名以及java验签实现--转
在开放平台领域,需要给isv提供sdk,签名是Sdk中需要提供的功能之一.由于isv使用的开发语言不是单一的,因此sdk需要提供多种语言的版本.譬如java.php.c#.另外,在电子商务尤其是支付领 ...
- Java 实现 RSA 非对称加密算法-加解密和签名验签
1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...
- C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通
文章目录 准备 C++ Java RSASignature.java RSAEncrypt.java Base64.java 准备 配置OpenSSL环境 配置VS2015环境 生成公私秘钥 然后你们 ...
- Windows gmssl生成SM2证书 + java bc库签名验签
Windows gmssl生成SM2证书 + java bc库签名验签 openssl生成SM2证书 1 生成密钥 gmssl ecparam -genkey -name sm2p256v1 -tex ...
- 【可食用】KeyTool生成KeyStore,证书、公钥、私钥文档JAVA生成,JAVA实现ECC签名验签
KeyTool生成KeyStore,证书.公钥.私钥文档JAVA生成,JAVA实现ECC签名验签 一.首先我们可以写个工具类生成密钥对.证书.公钥.私钥文本 jksAndCerGenerator.ja ...
- ECDSA数字签名算法(java实现ECDSA签名验签)
一.ECDSA概述 椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟.ECDSA于1999年成为ANSI标准,并于2000年成为IEEE和NIST标准.它在 ...
- java支付宝rsa2签名,使用支付宝SDK进行RSAj加签验签以及加密解密
/** * 支付宝 sdk 加签验签测试 * * @author 码农猿 */ public class SignDemo { /** * 公钥 */ private static final Str ...
最新文章
- Xshell关闭导致jar服务终止,使Jar在CentOS后台运行
- 在 IntelliJ IDEA 中与小姐姐连麦写代码是什么体验?
- salesforce学习框架图
- react 合并数组_React快速上手
- sqlserver启用xm_cmdshell
- 转 JavaScript传值及.Net传值方式总结
- linunx 定位最耗资源的进程
- UnixLinux大学教程目录
- Blend_技巧篇_淡入淡出
- CSDN 总部落户长沙,共建中国开发者产业中心城市!
- 使用Mave构建多模块项目
- Altium Designer10.1051图文安装教程
- AC A2C A3C
- exePath must be specified when not running inside a stand alone exe
- Word转为PDF,并在线预览。
- 后盾网php微博系统,后盾网ThinkPHP微博项目开发视频教程 - 轻松自学网
- 网线制作IP组网(基于华为eNSP模拟器)
- 血仍未冷——写在37岁生日
- GetDC和BeginPaint
- 解决“the database principal owns a schema in the database and cannot be dropped“问题