zoukankan      html  css  js  c++  java
  • PHP实现RSA签名和验签

    PHP实现RSA签名和验签

    密钥生成

    Mac和Linux 用户

    安装openssl
    后逐条输入如下指令:

    $ openssl 					#进入 OpenSSL 程序
    OpenSSL> genrsa -out rsa_private_key.pem 1024   	#生成私钥
    OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem 		#Java开发者需要将私钥转换成PKCS8格式
    OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #生成公钥
    OpenSSL> exit  					#退出 OpenSSL 程序
    

    疑问:使用base64_encode编码之后出现的+和/在http的get传输过程中会出现+变成空格的请。

    可以使用下面两个方法解决:

    function _base64url_encode($data) {
    	return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
    }
    	
    function _base64url_decode($data) {
    	$str = str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT);
    	return base64_decode($str);
    }
    

    PHP实现RSA用私钥签名

    $privatekey = openssl_get_privatekey( file_get_contents($private_key_file_path) );
    $signedStr = '';
    openssl_sign($signStr, $signedStr, $privatekey, OPENSSL_ALGO_SHA256);
    openssl_free_key($privatekey);
    $sign = $this->_base64url_encode($signedStr);
    

    PHP实现RSA用公钥验签

    $public_key = openssl_get_publickey( file_get_contents($pub_key_file_path) );
    if(empty($public_key)){
    	return false;
    }
    $sign = base64_decode($sign);
    $ok = openssl_verify( $sign_str, $sign, $public_key, OPENSSL_ALGO_SHA256 ); //SHA256
    openssl_free_key( $public_key );
    if ($ok == 1) {
    	$result = true;
    } elseif ($ok == 0) {
    	$result = false;
    } else {
    	MLog::write('DEBUG', __CLASS__.' ' . __FUNCTION__ . ' 0 openssl_error_str '.json_encode(openssl_error_string));
    }
    
  • 相关阅读:
    如何获取SQL Server数据库连接字符串的某些部分
    .NET同步原语Barrier简介
    模版引擎RazorEngine简介
    如何使用SQL Server实现SignalR的横向扩展
    SignalR的客户端.NET Client介绍
    一个简单的SignalR例子
    看视频学SignalR—在微软虚拟学院学习SignalR
    看视频学Bootstrap—在微软虚拟学院学习Bootstrap
    C# 窗口与控件的相关操作
    opencv——常见的操作
  • 原文地址:https://www.cnblogs.com/aworkstory/p/13426865.html
Copyright © 2011-2022 走看看