美文网首页
rsa的签名 验签 加密 解密

rsa的签名 验签 加密 解密

作者: 博楠同学 | 来源:发表于2019-04-09 19:34 被阅读0次
 public function generatorSign()//签名
{
 /**
   * 使用下面三条命令生成公钥和密钥对
  * openssl genrsa -out rsa_private_key.pem 1024
    openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem - 
    outform PEM -nocrypt -out private_key.pem
    openssl rsa -in rsa_private_key.pem -pubout -out 
    rsa_public_key.pem
 */
     $data = "大好人";//测试数据
     $privaliteKeyFile = 'zhang';//私钥路径
     $privalitePassword = "";//私钥密码
     $digestAlgo = 'md5';//摘要的算法
     $algo = OPENSSL_ALGO_SHA1;//签名的算法
     $privaliteKey =   openssl_pkey_get_private(file_get_contents($privaliteKeyFile),$privalitePassword);//加载私钥
     $digest = openssl_digest($data,$digestAlgo);//生成摘要
     //签名
     $sign = '';
     openssl_sign($digest, $sign, $privaliteKey, $algo);
     $sign = base64_encode($sign);
     dump($sign);
}

public function checkSign()//验签
{
     $data = "大好人";//测试数据
     $publicKeyFile = "zhang.pub";//公钥路径
     //摘要及签名算法需要和签名时算法保持一致
     $digestAlgo = 'md5';//摘要的算法
     $algo = OPENSSL_ALGO_SHA1;//签名的算法
     $publicKey =  openssl_pkey_get_public(file_get_contents($publicKeyFile));//加载公钥
     $digest = openssl_digest($data,$digestAlgo);//生成摘要
     //签名生成的base64加密的数据
     $sign =  base64_decode("DE1DZI9WKofYKZiCJVXAo4Q8M23ab+6nCfO/cjiyI5s9g/p+S9eHENX9JTfTxXJgIW0Vshxb1zeQYqwABhC63J29FXVWql1ykzIr/G4ZkxOq8tjIhR1iVmLfKqOMYVvDPhZ0+094lcbiaAvkPeVjMGO7Sb4BLJLn1GxHIHn9NMQ=");
   //验签
   $verify = openssl_verify($digest, $sign, $publicKey, $algo);
   dump($verify);//$verify int(1) 表示验证成功
}
public function encryptData()//非对称加密
{
 $data = "好人";//测试数据
 $publicKeyFile = "zhang.pub";//公钥路径
 $publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFile));//加载公钥
 //使用公钥进行加密
 $encryptData = '';
 openssl_public_encrypt($data, $encryptData, $publicKey);
 var_dump(base64_encode($encryptData));//加密数据
}

public function decryptData()//解密
{
 $encryptData = base64_decode('JDbC1INzzSIQjwSlYFMdw/mbdLs+SjVNzPGN8xmQJ6IWN9R2Vc/zD519uSJCPvaVfQ1OMS9kq1MQdt6KLz4oa6Ponor1OsYiJbNyQBkcIqSUz9h2xr6v7DDL+Z3QcKyrQGz4fcxj8iLuPUU02qKkdcURlg+Iq3Nixkctys4pMBE=');
 $privaliteKeyFile = 'zhang';//私钥路径
 $privalitePassword = "";//私钥密码
 $privaliteKey = openssl_pkey_get_private(file_get_contents($privaliteKeyFile),$privalitePassword);//加载私钥
 //使用私钥进行解密
 $data = '';
 openssl_private_decrypt($encryptData, $data, $privaliteKey);
 dump($data);//解密后的数据

相关文章

网友评论

      本文标题:rsa的签名 验签 加密 解密

      本文链接:https://www.haomeiwen.com/subject/qroiiqtx.html