继上一篇RSA对传输信息进行加密解密,再写个生成签名和验证签名。

  一般,安全考虑,比如接入支付平台时,请求方和接收方要互相验证是否是你,就用签名来看。

  签名方式一般两种,对称加密和非对称加密。对称加密就是双方互相有一个相同的key。非对称比如就是公钥和私钥。

  利用非对称openssl,下面是生成签名和验证签名的php示例。

  

<?php

$arrParams = array(
'z' => 1,
'a' => 2,
'n' => "hello",
'p' => "你好",
'c' => 0,
); $sortStr = createString($arrParams);// 有序生成字符串
// echo $sortStr;die; $sha = sha1($sortStr);// sha1生成摘要
// echo $sha;die; $private_key = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDKEquCt8WfdPFldkwy7GH3P274g4rxT2bFtaAlGKV03NVnZd/o
8+NvHyScilc4Awpp+xv0EJl25qI+OxoFjl0dGFXf8P4E93onPeZYfYtynTkhsFZv
CFYuf0GQW8o7M16d7WDeOKhyf9G/RWWTYYHwFO0uIPDXEgDHfLzf4NsZsQIDAQAB
AoGAUyLZQ19+Q/tl8Xt5IB5Ws9V6P25HNL6ZJtBxwbFhKTJN7ktgksP8l1Q1yN21
woqltzKjrodBzERZDcddDloi/kFCSj0I5rmnfMRifo8PLbv5+F9knxAyBc8Na52w
JLyv5+vqJM5cJ5OBxX055ipssQxBgno7OVJCgP8dY/EGnW0CQQDl9No8cmr3tha0
I9KPHbibwrwT9THBB5oGu3PUqTlBuJixjxGgf0pUm+qHw/r3PG1jNqD9Xx5REoQN
RrfQgLdPAkEA4PVjU8361m8weCUkm4jh/rsa8VYsiDEGCKEM6vmtaBYRlAXSeeb2
P/2MNlwI9bMSjiQ0q/XftHdSz4N+5/Le/wJBALDGBW4qVuiN5e4dC6RRKLU0gfil
qNXGzjUWrPhyDj3jdh4o6VgEAlQAd85ebfLZVQ3L1P5xvJB+N10tW+jAyikCQQCm
jAYlnXIAIAG6cYVQwV7PwKaJ1krR6bmV2eY+cOs5DF2nQUg6iAv4BDcyZ6EahqFO
Ku/z/+zHJzBgAfKKtvzxAkBeT86uZ6tfTNLR72UbP0abWKfE65cTNHGQZKp3Df79
Gx+UKVNiDHnfYmUu412QbpqDqi95XTDiPnry0fGqlzVJ
-----END RSA PRIVATE KEY-----';// 获取私钥 $pri_key_id = openssl_pkey_get_private($private_key);// 可用返回资源id Resource id
//var_dump($pri_key_id);die; $re = openssl_sign($sha, $signature, $pri_key_id, OPENSSL_ALGO_SHA1);
// var_dump($re);die; // $signature_base = base64_encode($signature); // 网络请求,post过去该base64字段,另一端解密
// echo $signature_base;die; // -----------------验签----------------
// 验签服务器拿到以上的参数(unset($signature)),同样生成有序串;sha1(); $public_key = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKEquCt8WfdPFldkwy7GH3P274
g4rxT2bFtaAlGKV03NVnZd/o8+NvHyScilc4Awpp+xv0EJl25qI+OxoFjl0dGFXf
8P4E93onPeZYfYtynTkhsFZvCFYuf0GQW8o7M16d7WDeOKhyf9G/RWWTYYHwFO0u
IPDXEgDHfLzf4NsZsQIDAQAB
-----END PUBLIC KEY-----';
$pu_key = openssl_pkey_get_public($public_key); $verify = openssl_verify($sha, $signature, $pu_key, OPENSSL_ALGO_SHA1);
if($verify == 1){
echo 'ok';
} else {
echo 'fail';
} /**
* @param $param
* @return bool|string
* 生成有序字符串
*/
function createString($param){
if (!is_array($param) || empty($param)){
return false;
}
ksort($param);
$concatStr = '';
foreach ($param as $k=>$v) {
$concatStr .= $k.'='.$v.'&';
}
$concatStr = rtrim($concatStr, '&');
return $concatStr;
}

  

openssl生成签名与验证签名的更多相关文章

  1. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  2. C#.NET RSA 私钥签名 公钥验证签名

    C#.NET RSA 私钥签名 公钥验证签名 公钥验签 1.待签名字符串转为byte数组时,一般使用UTF8. 2.将私钥字符串(PKCS8或PKCS1格式)转为C#.NET的RSACryptoSer ...

  3. php生成签名及验证签名

    <?php /** * 根据原文生成签名内容 * * @param string $data 原文内容 * * @return string * @author confu */ functio ...

  4. (8) openssl rsautl(签名/验证签名/加解密文件)和openssl pkeyutl(文件的非对称加密)

    rsautl是rsa的工具,相当于rsa.dgst的部分功能集合,可用于生成数字签名.验证数字签名.加密和解密文件. pkeyutl是非对称加密的通用工具,大体上和rsautl的用法差不多,所以此处只 ...

  5. iOS RSA加解密签名和验证

    转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...

  6. C#中RSA加密解密和签名与验证的实现

    RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔(Adi Shamir)和伦纳德•阿德曼(Le ...

  7. 【转】C#中RSA加密解密和签名与验证的实现

    [转]C#中RSA加密解密和签名与验证的实现 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔 ...

  8. openssl 生成证书基本原理

    摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一个项目要进行交易数据传输,因为这个项目银行那边也是刚刚开始启动,所 ...

  9. openssl生成密钥/证书

    一.公钥/私钥/签名/验证签名/加密/解密/非对称加密 对称加密:用同一个密码  加密/解密  文件. 非对称加密:加密用的一个密码,解密用另外一组密码. 加密解密:公钥加密数据,然后私钥解密. 公钥 ...

随机推荐

  1. FullCalendar:eventColor,eventBackgroundColor, eventBorderColor, and eventTextColor

    <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>背景色設定< ...

  2. JS数组迭代方法

    先说 every()和 some(),它们都用于查询数组中的项是否满足某个条件. every(): var numbers = [1,2,3,4,5,4,3,2,1]; var everyResult ...

  3. 【读书笔记】iOS-button只显示在一个界面的右下角,不管界面大小怎么变化(xib,没有使用自动布局)(一)

    一,新建立一个工程,Hello,如图所示. 二,Xcode--->New--->File--->FirstViewController---->选中Also create XI ...

  4. 【读书笔记】iOS-音频设备访问

    音频的输入是通过麦克风实现,音频的输出是通过扬声气实现的.在iOS系统中无法直接操控麦克风和扬声器,苹果提供了丰富的音频API. 一,音频API介绍 在iOS和Mac OS X上开发音频应用,主要有两 ...

  5. Java并发编程(九)并发容器

    并发容器的简单介绍: ConcurrentHashMap代替同步的Map(Collections.synchronized(new HashMap())),众所周知,HashMap是根据散列值分段存储 ...

  6. Kotlin入门(16)容器的遍历方式

    Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList.映射HashMap等等.不过Kotlin作为一门全新的语言,肯定还是要有自己 ...

  7. Python 如何删除列表中的空值

    今天在获取android性能CPU测试数据时,发现这么一个问题: # -*- coding:utf-8 -*- import os import time cpuInfo = os.popen(r'a ...

  8. localStorage 知识点

    先补充下localStorage 知识点:JS对象读取形式:localStorage.name添加/修改localStorage.name = "xuanyuan"其中" ...

  9. centos7下安装docker(3.1创建镜像commit)

    docker commit创建镜像 步骤:1.运行容器 2.修改容器 3.将容器保存为镜像 1. 注:-it是以交互模式进入容器,并打开终端 2.安装一个vim进行修改镜像 yum install - ...

  10. 最好的8个 Java RESTful 框架

    原文出处: colobu 过去的每一年,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可 ...