/**
* 对数据进行签名
* $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. Oracle Multitenant Environment (一) About

    About oracle mulittenant environment The multitenant architecture enables an Oracle database to func ...

  2. 又通过一道题目,替换字符串 —— 剑指Offer

    https://www.nowcoder.net/practice/4060ac7e3e404ad1a894ef3e17650423?tpId=13&tqId=11155&tPage= ...

  3. ORA-00600: internal error code, arguments: [kkqtSetOp.1]

    新数据库从32升级到64位的11G 11 2 0 3 有条SQL 语句运行的时候会导致内部错误. 使用PL/SQL DEVELOPER 查询该语句的运行机会 按F5键 就激发了这个ORA600 单击此 ...

  4. Handling bundles in activities and fragments

     Bundle is a useful data holder, which maps String values to various Parcelable types. So basicall ...

  5. settimeout--原来定时器是有三个及以上参数的

    我平常使用的 settimeout 定时,只知道他有两个参数,一个是function异步成功后的回调函数,一个是delay延时毫秒,今天发现它还可以接着传餐,作为 执行回调函数的参数 语法:var t ...

  6. pat-1087【最短路径】

    近期一次pat考试中的最后一题.事实上玩算法这东西就像打魔兽.不能光有思想上的高度,微操必须实打实.就这么个迪杰斯特拉算法.多少教科书上都讲烂了. 可是现场又有多少人是敲对的呢?不能光停留在理解上.必 ...

  7. oc67--NSString1

    // // main.m // NSString基本概念 // Foundation框架,苹果有80多个框架,Foundation有125个头文件. #import <Foundation/Fo ...

  8. ubuntu安装ruby,安装sass,安装compass

    安装ruby apt-get install ruby. 默认会安装1.9的. 不是自己想要的. 可以进行下面的处理. # sudo apt-get install python-software-p ...

  9. go语言笔记——切片底层本质是共享数组内存!!!绝对不要用指针指向 slice切片本身已经是一个引用类型就是指针

    切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型) ...

  10. JSP-Runoob:JSP XML 处理数据

    ylbtech-JSP-Runoob:JSP XML 处理数据 1.返回顶部 1. JSP XML 数据处理 当通过HTTP发送XML数据时,就有必要使用JSP来处理传入和流出的XML文档了,比如RS ...