php实现MD5withRSA签名算法

不知道怎么获得RSA公钥和私钥的先看我之前这篇 http://www.cnblogs.com/kennyhr/p/3746048.html

不清楚RSA算法的推荐看阮老师的http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html


<?php

class Md5RSA{

/**
* 利用约定数据和私钥生成数字签名
* @param $data 待签数据
* @return String 返回签名
*/
public function sign($data=‘‘)
{
if (empty($data))
{
return False;
}

$private_key = file_get_contents(dirname(__FILE__).‘/rsa_private_key.pem‘);
if (empty($private_key))
{
echo "Private Key error!";
return False;
}

$pkeyid = openssl_get_privatekey($private_key);
if (empty($pkeyid))
{
echo "private key resource identifier False!";
return False;
}

$verify = openssl_sign($data, $signature, $pkeyid, OPENSSL_ALGO_MD5);
openssl_free_key($pkeyid);
return $signature;
}

/**
* 利用公钥和数字签名以及约定数据验证合法性
* @param $data 待验证数据
* @param $signature 数字签名
* @return -1:error验证错误 1:correct验证成功 0:incorrect验证失败
*/
public function isValid($data=‘‘, $signature=‘‘)
{
if (empty($data) || empty($signature))
{
return False;
}

$public_key = file_get_contents(dirname(__FILE__).‘/rsa_public_key.pem‘);
if (empty($public_key))
{
echo "Public Key error!";
return False;
}

$pkeyid = openssl_get_publickey($public_key);
if (empty($pkeyid))
{
echo "public key resource identifier False!";
return False;
}

$ret = openssl_verify($data, $signature, $pkeyid, OPENSSL_ALGO_MD5);
switch ($ret)
{
case -1:
echo "error";
break;
default:
echo $ret==1 ? "correct" : "incorrect";//0:incorrect
break;
}
return $ret;
}

}

php实现MD5withRSA签名算法

时间: 2024-10-08 00:10:50

php实现MD5withRSA签名算法的相关文章

RSA加密解密(转)

RSA加密解密 对于RSA产生的公钥.私钥,我们可以有两种方式可以对信息进行加密解密.私钥加密-公钥解密 和 公钥加密-私钥解密RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密算法.

Java数字签名算法--RSA

签名具有的特性: 安全性 抗否认性 数字签名:带有密钥(公钥.私钥)的消息摘要算法(使用私钥进行签名,使用公钥进行验证) 数字签名算法:RSA.DSA.ECDSA 数字签名特性: 验证数据完整性 认证数据来源 抗否认性 经典算法 MD.SHA两类 数字签名算法-RSA的执行过程 代码: package com.chengxuyuanzhilu.rsa; import java.security.InvalidKeyException; import java.security.KeyFactor

DSA签名算法笔记

注意:只是个人理解,可能有不正确的地方 DSA(Digital Signature Algorithm)签名算法是由美国国家标准与技术研究院(NIST, National Institute of Standards and Technology)提出的一个关于数字签名的美国联邦信息处理标准(FIPS, Federal Information Processing Standard).该标准在1991年8月提出,1993以FIPS 186被采用,作为数字签名(DSS, Digital Signa

c#使用椭圆签名算法制作软件序列号

椭圆曲线密码学(Elliptic curve cryptography,缩写为ECC)是基于椭圆曲线数学的一种公钥密码的方法.椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的.椭圆签名算法应该是微软最先用在软件保护上的,我们平常用的25位序列号就是基于椭圆签名算法的.理论上说,椭圆签名算法是很难破解的,因为...(省略,感兴趣的可以看看<ECC加密算法入门介绍>这篇文章).但是因为微软出于序列号长度的考虑,签名的长度只有62bit(具体

亚马逊云存储签名算法问题

最近在研究云存储. 如果没有相关背景知识的朋友,请先百度. 我首先要说的是是签名算法错误问题,可能是他们网站内容错误,请核查. 如下. http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-authentication-HTTPPOST.html 样例网站如下: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 我采用三方在线加密网站,算出来的密码与AM

签名算法

在中文站开放平台,url请求的多个参数都要参与签名(与文件上传有关的api中,文件字节流那个参数不参与签名),下面以两个参数为例,假设请求的url格式如下所示: http://gw.open.1688.com/openapi/param2/1/system/currentTime/1000000?b=2&a=1(appKey=1000000,假设secretKey=test123) 参照签名算法说明,签名串s组装规则为: 1. 构造签名因子:urlPath.url 中的一部分,我们称之为urlP

ElGamal加密、签名算法笔记

ElGamal加密算法是一种非对称加密算法,基于Diffie-Hellman密钥交换算法,由Taher Elgamal在1985年提出. ElGamal加密算法可以应用在任意一个循环群(cyclic group)上.在群中有的运算求解很困难,这些运算通常与求解离散对数(Discrete logarithm)相关,求解的困难程度决定了算法的安全性. 群(Group)的定义: 群是数学中的概念. 一些元素组成的集合,如果元素满足以下条件,则把这些元素组成的集合叫做群: 在元素上可以定义一个2元运算,

微信签名算法的服务端实现(.net版本)

一.概要 微信此次开放JS接口,开放了一大批api权限,即使在未认证的订阅号也可以使用图像接口,音频接口,智能接口,地理位置,界面操作,微信扫一扫等功能.要知道:以前订阅号只能接受和被动回复用户消息而已.微信官方没有给出.net版本,有java,node,php和python,唯独没有.net版本,这是怎么了?本文就教你实现.net版本的微信JS-SDK权限签名生成算法. 这会大大激发了js前端开发人员的热情,可以做更多的事情,不用在向以前一样用破解微信的weixinbridge狼狈的苟活于人世

浏览器运行java插件报错:Algorithm constraints check failed: MD5withRSA

今天使用kvm管理机房机器的时候发现一只连不上,报以下错误: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Algorithm constraints check failed: MD5withRSA 我确认我已经把域名添加到例外了,但是还是不行.之前是可以的,同事现在也可以,可能是最近我更新过. goog