`
王之子
  • 浏览: 109823 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

openssl 签名和验签不符的几个原因

阅读更多

先附上签名的代码

 

$privateKeyFile = '/data/private.pem';
$password = '123456';
$privateKey = file_get_contents($privateKeyFile);	
$pKeyId = openssl_pkey_get_private($privateKey, $password);
openssl_sign($xmlSignSrc, $signature, $pKeyId);
openssl_free_key($pKeyId);
$signature = bin2hex($signature);

 

先附上验签的代码

 

	public function verifyStr($orgStr,$signature){
		echo '签名原文:'.$orgStr;
		$pubKeyId = openssl_get_publickey(file_get_contents($certFile));
		$flag = (bool) openssl_verify($orgStr, hex2bin($signature), $pubKeyId);
		openssl_free_key($pubKeyId);
		
		if ($flag) {
			echo '<br/>Verified: <font color=red>SUCC</font>.';
		    return TRUE;
		} else {
		    echo '<br/>Verified: <font color=red>Failed</font>.';
		    return FALSE;
		}
	}

 

生成私钥

openssl genrsa -out rsa_private_key.pem 1024

 

生成公钥

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

 

 

首先要保证证书是 pem 格式的,用记事本打开如以下格式:



 

如果打开的是乱码,说明不是pem格式的证书,要把它转换成 pem 格式,举个例子:如果是 cer 格式,转换命令如下:

openssl x509 -inform DER -in allinpay-pds.cer  -out allinpay-pds.pem

 

如果是 p12 格式证书转换,则有多种可能,得出的是两个稍有不同的代码

 

openssl pkcs12 -clcerts -nokeys -out cer.pem -in 20058100001485304.p12 


 
openssl pkcs12 -clcerts -nodes -out cer.pem -in 20058100001485304.p12


 
如果PHP版本低于 php 5.4.1 ,请用 hextobin 替代 hex2bin 函数

具体证书转换流程,可借助搜索引擎研究下。另外,验签出错可能还和你的域名有关

 

补充点SSL证书的知识:https://help.aliyun.com/knowledge_detail/42216.html

  • 大小: 220.5 KB
  • 大小: 33.1 KB
  • 大小: 55.6 KB
分享到:
评论

相关推荐

    linux c 使用openssl实现SHA1WithRSA实现,签名,验签

    在Linux环境下,C语言通过OpenSSL库实现SHA1WithRSA签名和验证是常见的加密操作,主要涉及以下几个核心知识点: 1. **OpenSSL库**:OpenSSL是一个强大的安全套接字层密码库,包含各种主要的密码算法、常用的密钥和...

    Delphi RSA 加密解密签名验签控件 RSA_Component(1.0.0.0).rar

    但是没有提供Delphi使用的RSA支持,delphi开发者使用起来还是有些麻烦,特别是RSA加解密及签名验证等等,因此我们开发了这个RSA控件,秩序简单的几个API就可以立即实现RSA的加解密及签名验证等功能。

    支付宝_签名_SHA256WithRsa签名_SHA1WithRSA签名delphi源码.rar

    在提供的压缩包文件中,可以看到以下几个关键文件: 1. `uMain.dfm`:这是Delphi的表单文件,包含了用户界面的设计和控件的布局,可能包括输入消息、显示签名、验证签名等功能。 2. `pSSLDemo.dpr`:这是Delphi项目...

    windows-openssl.zip_OPENSSL 库_openssl windows_openssl开发库_openssl

    OpenSSL 是一个强大的安全套接层 (SSL) 和 Transport Layer Security (TLS) 实现的开源库,它提供了各种加密算法、常用的密钥和证书封装管理功能以及 SSL 协议,并提供了一个全面且易于使用的应用程序接口(API)。...

    openssl.zip

    OpenSSL库提供了丰富的函数接口,涵盖了密钥生成、证书管理、加密解密、签名验签等多个方面。例如,`RSA`模块用于处理RSA公钥加密算法,`EVP`模块则提供了高级的加密和哈希操作。 总之,OpenSSL是互联网安全基础...

    Delphi 开发的 RSA 加密解密签名验签控件演示程序 RSA_Component_Demo(1.0.0.0).rar

    但是没有提供Delphi使用的RSA支持,delphi开发者使用起来还是有些麻烦,特别是RSA加解密及签名验证等等,因此我们开发了这个RSA控件,秩序简单的几个API就可以立即实现RSA的加解密及签名验证等功能。

    RSA体系 c++/java相互进行加签验签

    首先,我们需要理解RSA的几个基本概念: 1. 公钥:用于加密和验证签名,可以公开给任何人。 2. 私钥:用于解密和签名,必须保密。 3. 加密:使用接收方的公钥对数据进行加密,只有拥有对应私钥的人才能解密。 4. ...

    Delphi标准RSA加密,解密,签名.与C,Java,php等通用

    4. **库的选择**:Delphi虽然内建了一些加密支持,但为了更丰富的功能和更好的性能,可以考虑使用第三方库,如OpenSSL、Crypto++等,它们提供了完善的RSA实现和更多的加密算法。 通过以上介绍,我们可以看出Delphi...

    ECC数字签名的实现(C语言)

    在给定的文件列表中,我们看到几个可能的源代码文件(如11.18.c、未命名2.c)和开发环境文件(ECC.dev、项目1.dev)。这些文件可能包含了实现ECC签名算法的代码和相关配置。`Makefile.win`表明有一个针对Windows系统...

    openssl编程 (1).zip

    在OpenSSL编程中,我们需要了解以下几个核心概念和关键技术: 1. **加密算法**:OpenSSL支持多种加密算法,包括对称加密(如AES、DES、3DES)和非对称加密(如RSA、DSA、ECC)。对称加密速度快,适合大量数据的加密...

    OpenSSL.zip

    OpenSSL 是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现库,同时也包含了各种加密算法、常用的密钥和证书处理工具。在iOS和Mac OS平台上,OpenSSL被广泛应用于网络通信的安全保障,例如HTTPS协议的实现...

    ooooopenssl0.9.8e.tar.gz

    - **加密算法**:OpenSSL 支持大量的对称和非对称加密算法,如 AES、DES、RSA、DSA 等,提供了加密、解密、签名和验签等操作。 - **证书管理**:OpenSSL 可用于生成、管理和验证 X.509 数字证书,这些证书用于识别...

    C++多种算法实现的在线签名鉴定.zip

    4. **签名与验签函数**:实现签名生成和验证的过程,涉及散列和非对称加密的结合。 5. **用户界面**:提供图形用户界面(GUI)或命令行界面(CLI),使得用户能够上传签名文件并进行鉴定操作。 项目中的源代码将...

    微信支付证书开发

    以下是关于微信支付证书开发的几个关键知识点: 1. **申请与下载证书**:商家需要在微信支付商户平台中完成相关设置,按照指引申请并下载证书文件,通常文件格式为`.p12`或者`.pem`。 2. **证书导入**:下载的证书...

    支付宝android系统接入步骤流程

    支付宝Android系统接入步骤流程的知识点主要包含以下几个方面: 一、了解支付宝安全支付服务 支付宝安全支付服务是运行在Android操作系统上的组件,旨在为其他应用程序提供方便、安全且可靠的支付功能。其工作原理...

    安全支付服务 iOS 应用开发指南

    ##### 3.3 RSA签名和验签 **RSA签名**是指使用私钥对数据进行加密处理,生成一个数字签名。而**RSA验签**则是使用公钥对签名进行解密,验证签名的有效性。 1. **RSA签名**:商户在生成订单时,使用自己的私钥对订单...

    alipayDemo_java_20170103165646616975.zip

    首先,我们需要理解的是,支付宝接口的调用通常涉及到以下几个核心概念: 1. **AppID**: 这是支付宝分配给每个应用的独特标识,用于区分不同的业务或服务。在使用Demo前,开发者需要确保已获得正确的AppID,并将其...

    用于 8 位微控制器的非常小的 SM2 实现_C语言_代码_相关文件_下载

    这是一个8位处理器上的SM2实现,未使用openssl等第三方库,目前仅支持256位SM2。代码基于nano-ecc实现(8位处理器上的ecc实现 本代码主要在以下几方面对nano-ecc进行了改动: 大数模运算 - nano-ecc在实现大数模...

Global site tag (gtag.js) - Google Analytics