RSA 加密传输 (php)

RSA加密传输:

  对于初接触RSA加密的童鞋来说,很可能会被绕进去。最近写了一个RSA加密传输的需求,总结一下。希望能对你有点帮助。

  首先要明白以下几点:

    1:公钥和私钥一定是成对的才可以

    2:私钥是保密的,公钥是公开的

    3:公钥和私钥,可以互为加密和解密

    4:用其中一个密钥加密数据,则只有对应的那个密钥才能解开

主要有两种用法

  1:公钥加密

    A传输数据给B

      (1),A用公钥加密数据,传输给B

      (2),B用私钥解密

  2:公钥认证

    A传输数据给B

      (1),A用私钥加密数据(也就是私钥签名),传输给B

      (2),B用公钥解密(也就是验签)

示例:证书,公钥认证的过程

签名:

    /**
    signing  签名 password   私钥证书需要密码
     */
    public function get_signing_str($data){
        //$data=$this->get_request_string();
        $certs=array();
       // dump(file_get_contents(ROOT_PATH."public/static/"."private_key.pfx"));
        openssl_pkcs12_read(file_get_contents(ROOT_PATH."public/static/"."private_key.pfx"), $certs, "password");
        if(!$certs) return;
        $signature = ‘‘;
        openssl_sign($data, $signature, $certs[‘pkey‘],‘sha256‘);
        //dump(base64_encode($signature));
        return base64_encode($signature);
    }

验签:

public function verify_signing($rest){
        $rest=json_decode($rest,true);
        $sign=$rest[‘sign‘];
        $sign = base64_decode($sign);//签名参数
        unset($rest[‘sign‘]);
        unset($rest[‘sign_type‘]);
        $verifystr=$this->get_request_str($rest);//验签明文字符串
        $pkeyid = openssl_pkey_get_public(file_get_contents(ROOT_PATH."public/static/"."public_key.cer"));
        $verify = openssl_verify($verifystr,$sign,$pkeyid,‘sha256‘); //验签  (明文/签名/key)
       // $msg = openssl_error_string();
       // dump($msg);
       // dump($verify);
        openssl_free_key($pkeyid);
        if($verify==1){
            echo ‘验签通过‘;
           // $data=json_encode($rest);
           // return $data;
        }else{
            return ‘验签失败‘;
        }
    }

RSA加密过程

        $privateKeyStr=file_get_contents(ROOT_PATH."public/static/"."pkcs1_key.pem");
        $pi_key=openssl_pkey_get_private($privateKeyStr);
        $encryptSign="";
        openssl_private_encrypt($sign_str,$encryptSign,$pi_key);  //(待加密字符串/加密后的字符串/key)

SHA加密过程

$sign  = hash(‘sha256‘,$source);  //(算法/待加密字符串)
时间: 2024-11-12 23:45:00

RSA 加密传输 (php)的相关文章

php RSA加密传输代码示例(轉)

原文地址:http://www.cnblogs.com/firstForEver/p/5803940.html 涉及敏感数据的传输,双方最好约定使用加密解密.那RSA非对称加密就大有作为了. 服务端可以保留自己的私钥,发给客户端对应的公钥.这样就可以互相加解密了.php中rsa加解密实现: 首先要生成一对公钥私钥.前提是linux机器上安装了openssl命令. 生成私钥文件: openssl genrsa -out rsa_private_key.pem 1024 利用私钥,生成公钥: ope

用RSA加密实现Web登录密码加密传输

用RSA加密实现Web登录密码加密传输 通常我们做一个Web应用程序的时候都需要登录,登录就要输入用户名和登录密码,并且,用户名和登录密码都是明文传输的,这样就有可能在中途被别人拦截,尤其是在网吧等场合. 这里顺带一个小插曲,我以前有家公司,办公室装修时候安排的网口相对较少,不太够用,于是我和另外一个同事使用了一个hub来共享一个网口,这就导致了很有趣的现象:任何他的网络包我都能抓得到,当然了,我的他也能抓得到.这是不是有很大的安全隐患了?我有可能在不经意间会泄漏自己的密码. 所以,很多安全要求

RSA非对称算法实现HTTP密码加密传输

目前一般帐号系统,都是https来传输账户性息,申请一个https证书也不贵.但是网站的其它功能并不需要走https协议,https和http混布比较麻烦,所以决定先实现一个http协议传输RSA非对称密钥算法加密密码的方案.这样做只能说是保证不明文传密码,但是并不能防身份伪造,所以其实还是不安全的,只是目前产品能接受,算是一个过渡期吧.有需要的话还是要改成https的. 关于rsa算法,具体参考维基百科相关的介绍.简单来说,用rsa算法产生一对公钥和私钥,通信双方A和B,A用公钥加密要发送的数

用RSA实现Web单点登录密码的加密传输

在使用通用权限管理系统(吉日嘎拉)的单点登录功能时,对登录密码使用了RSA加密(非对称加密),有使用这个权限管理系统的可参考下. 前端部分,请引用以下几个js文件: <script type="text/javascript" src="ExtJS/jquery.js"></script> <script type="text/javascript" src="ExtJS/BigInt.js" &

MD5加密和RSA加密

1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹):    ②.不同的输入得到的不同的结果(唯一性):    ③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,不能解密:  MD5的用途:     1.防止被篡改:    1)比如发送一个电子文档,发送前,我先得到MD5的

RSA加密解密及RSA加签验签

RSA安全性应用场景说明 在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念.简单来说加密解密是公钥加密私钥解密,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解密并查看数据:加签验签是私钥加签公钥验签,持有私钥(一人持有)可以加签,持有公钥(多人持有)可以验签. 在金融行业在设计到数据交互传输的时候,需要考虑数据的安全性问题.下文通过介绍RSA的加密和加签两个特性,说明RSA加密技术在保障数据传输过程中的安全性以及实现数据的防篡改和防否机制的应用场景及代码

页面登录密码加密传输机制

为了避免用户密码使用明文传输,在传输前需要进行加密处理,服务端接收之后再进行解密,这样从一定程度上保护了密码安全. 基本过程如下: 显然,采用非对称加密更合适,这里我们使用RSA加密算法. 需要三方面的东东. 第一样,服务器端RSA加解密工具类及KEY定义. 第二样,Web端RSA加密工具类,支持根据公钥加密. 第三样,用户登录时的处理脚本. 赋代码是直接的 Case one 1 namespace Tool.Security 2 { 3 /// <summary> 4 /// 对公钥的提供和

java和php实现RSA加密互通-b

java和PHP RSA加密实现互通 1:通过openssl 生成公钥和密钥文件(linux) (1)  生产私钥文件命令 openssl genrsa -out rsa_private_key.pem 1024 生产结果 -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCbrbo/JaPJTJLl+6hfZm7uuLIr t/hivaLfot32wq/nSzoSsYkoNk27Yy+n10ODoZ75/91Y8Q

RSA加密解密(转)

RSA加密解密 对于RSA产生的公钥.私钥,我们可以有两种方式可以对信息进行加密解密.私钥加密-公钥解密 和 公钥加密-私钥解密RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密算法.