/**
* 对数据进行签名
* $data = 'If you are still new to things, we’ve provided a few walkthroughs to get you started.'; 签名数据
* $privatekeyFile = '/path/to/private.key'; 私钥
* $passphrase = ''; 密码
*/
function sign($data, $privatekeyFile, $passphrase)
{
// 摘要及签名的算法
$digestAlgo = 'sha512';
$algo = OPENSSL_ALGO_SHA1;
// 加载私钥
$privatekey = openssl_pkey_get_private(file_get_contents($privatekeyFile), $passphrase);
// 生成摘要
$digest = openssl_digest($data, $digestAlgo);
// 签名
$signature = '';
openssl_sign($digest, $signature, $privatekey, $algo);
//释放内存
openssl_free_key($privatekey);
$signature = base64_encode($signature);
return $signature;
} /**
* 验签
* $data = 'If you are still new to things, we’ve provided a few walkthroughs to get you started.';
* $publickeyFile = '/path/to/public.key'; 公钥
*/
function verify($data, $publickeyFile)
{
// 摘要及签名的算法,同上面一致
$digestAlgo = 'sha512';
$algo = OPENSSL_ALGO_SHA1;
// 加载公钥
$publickey = openssl_pkey_get_public(file_get_contents($publickeyFile));
// 生成摘要
$digest = openssl_digest($data, $digestAlgo);
// 验签
$verify = openssl_verify($digest, base64_decode($signature), $publickey, $algo);
openssl_free_key($publickey);
return $verify; // int(1)表示验签成功
}
/**
* 加密
* $data = 'If you are still new to things, we’ve provided a few walkthroughs to get you started.';
* $publickeyFile = '/path/to/public.key'; 公钥
*/
function encrypt($data, $publickeyFile)
{
// 加载公钥
$publickey = openssl_pkey_get_public(file_get_contents($publickeyFile));
// 使用公钥进行加密
$encryptedData = '';
openssl_public_encrypt($data, $encryptedData, $publickey);
return base64_encode($encryptedData);
}
/**
* 解密
* $encryptedData 待解密数据
* $privatekeyFile = '/path/to/private.key'; 私钥
* $passphrase = ''; 密码
*/
function decrypt($encryptedData, $privatekeyFile, $passphrase)
{
// 加载私钥
$privatekey = openssl_pkey_get_private(file_get_contents($privatekeyFile), $passphrase);
// 使用公钥进行加密
$sensitiveData = '';
openssl_private_decrypt(base64_decode($encryptedData), $sensitiveData, $privatekey);
return $sensitiveData; // 应该跟$data一致
}

PHP 之用证书对数据进行签名、验签、加密、解密的更多相关文章

  1. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

    原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...

  2. 数据安全管理:RSA加密算法,签名验签流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.RSA算法简介 1.加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用.可以在不直接传递密钥的情况下,完成加 ...

  3. 证书:数字签名和验签&加密和解密

    用的是湖北省数字证书认证管理中心的签名和加密 1.带私钥的证书,即p12格式证书(后缀为.pfx) 2.不带私钥的证书,有多种格式,通常我们使用的是cer格式证书(后缀为.cer) 一. 1.什么是对 ...

  4. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic

    C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...

  5. PHP 生成公钥私钥,加密解密,签名验签

    test_encry.php <?php //创建私钥,公钥 //create_key(); //要加密内容 $str = "test_str"; //加密 $encrypt ...

  6. [Python3] RSA的加解密和签名/验签实现 -- 使用pycrytodome

    Crypto 包介绍: pycrypto,pycrytodome 和 crypto 是一个东西,crypto 在 python 上面的名字是 pycrypto 它是一个第三方库,但是已经停止更新,所以 ...

  7. RSA签名验签

    import android.util.Base64; import java.security.KeyFactory; import java.security.PrivateKey; import ...

  8. 利用SHA-1算法和RSA秘钥进行签名验签(带注释)

    背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...

  9. RSA密钥生成、加密解密、签名验签

    RSA 非对称加密公钥加密,私钥解密 私钥签名,公钥验签 下面是生成随机密钥对: //随机生成密钥对 KeyPairGenerator keyPairGen = null; try { keyPair ...

  10. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

随机推荐

  1. vue2的简单Popup (Confirm,Alert)组件

    github:  https://github.com/longfei59418888/vui   (记得给一个 start,以后有一起讨论,各种好组件) demo :http://60.205.20 ...

  2. 解决canvas跨域问题(图片,视频资源跨域)

    添加跨域条件   crossorigin="anonymous" [Redirect at origin 'http://xxx.xx.com' has been blocked ...

  3. Java实现打印功能-AWT Graphics2D

    Java实现打印功能 用java实现打印,java.awt中提供了一些打印的API,要实现打印,首先要获得打印对象,然后继承Printable实现接口方法print,以便打印机进行打印,最后用用Gra ...

  4. Cocos2d-x教程(34)-三维物体OBB碰撞检測算法

    欢迎增加Cocos2d-x 交流群:193411763 个中心点.1个旋转矩阵和3个1/2边长(注:一个旋转矩阵包括了三个旋转轴,若是二维的OBB包围盒则是一个中心点,两个旋转轴,两个1/2边长). ...

  5. 数据库学习之简单的SQL语句

    1.数据库的结构 1.1数据库 不同数据库叫做Catalog(在有的 DBMS 中也称为 Database,即数据库) .採用多 Catalog 以后能够给我们带 来例如以下优点: 便于对各个 Cat ...

  6. C++学习之函数模板与类模板

    泛型编程(Generic Programming)是一种编程范式,通过将类型参数化来实现在同一份代码上操作多种数据类型,泛型是一般化并可重复使用的意思.泛型编程最初诞生于C++中,目的是为了实现C++ ...

  7. Python图像处理库:PIL中Image,ImageDraw等基本模块介绍

    Python图像处理库:PIL中Image,ImageDraw等基本模块介绍 标签: 图像处理PILPYTHON 2016-08-19 10:58 461人阅读 评论(0) 收藏 举报  分类: 其他 ...

  8. jquery动态创建form表单

    function exportExcel() { var merchantName = $('#merchantName').val(); var merchantNo = $('#merchantN ...

  9. LeetCode 7. Reverse Integer (倒转数字)

    Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Examp ...

  10. Longest Increasing Subsequence HDU - 6284

    /* 首先预处理好f g数组 fi :以a[i]为结尾的 最长上升子序列的长度 gi :以a[i]为开始的 最长上升子序列的长度 mxx : 最长上升子序列的长度 线段树优化 nlogn (不包含a[ ...