空城-最好的安排
利用RSA对前后端加密的探索
利用RSA对前后端加密的探索

RSA-JS-PHP

项目地址rsa-js-php

前后端交互时为了保证信息安全可使用RSA方式加密信息,在数据量大的时候可采用DES+RSA结合方式。DEMO演示地址

一点历史

1976年以前,所有的加密方法都是同一种模式:
(1)甲方选择某一种加密规则,对信息进行加密;
(2)乙方使用同一种规则,对信息进行解密。由于加密和解密使用同样规则(简称”密钥”),这被称为”对称加密算法”(Symmetric-key algorithm)。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的”非对称加密算法”。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。

算法原理

  • RSA算法的主要原理是利用了数论中质数的巧妙关系即欧拉定理,要实现RSA算法需找到三个具有特定关系的值,在此命名为n e d;
  • 假设有两个值互为质数的正整数p和q,(为了便于运算演示,取的值比较小,通常情况下是取的非常大的值,值越大破解的难度越大),p=5 q=17 即 p和q的乘积为n=5×17=85;
  • 计算得出n的欧拉函数φ(n)=(p-1)(q-1)=64,在区间(1,64)中随机选择一个数e=13,,需保证e和φ(n)为互质关系;
  • 计算e对于φ(n)的模反元素d,得出d=5;至此,已经得到了三个具有特定关系的值 n=85 e=13 d=5,设公钥为(n,e),私钥即为(n,d);
  • 假设用户发送数字3到服务端,通过RSA加密的过程为:m=(3^13) mod 85=63,mod为求模,得到密文63;
  • 服务端收到密文m=63,解密过程为 s=(63^5) mod 85=3,最终得出原文为3;
  • 加解密关系为 m=(s^e) mod n,s=(m^d) mod n;私钥与公钥可互相使用,只需要保护一个不被泄露即可;
  • 于是私钥泄露就意味着RSA加密失去意义;

    使用方式

    请确保PHP的openssl扩展开启,且保证php在环境变量中,如果是windows需添加环境变量:名 OPENSSL_CONF,值 D:\http\php\extras\ssl\openssl.cnf(根据openssl.cnf目录而定);

  • 生成新的公私钥文件在项目根目录命令行运行:
    1
    php rsa.php new
  • 保护好私钥,确保私钥不被暴露在web可访问目录下;
  • 将生成的rsa_pubkey.js引入值web项目中,具体请运行DEMO演示即可;
  • rsa.class.php的使用:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // 初始化参数,设置公钥与私钥的路径
    rsa::$prikey = 'src/key/private.pem';
    rsa::$pubkey = 'src/key/public.pem';

    // JavaScript脚本生成位置,用于重新生成公私钥
    rsa::$script = 'rsa_pubkey.js';

    // $model = 1 公钥加密,私钥解密:公开公钥,保存私钥
    // $model = 2 私钥加密,公钥解密:公开私钥,保存公钥
    rsa::$model = 1;

    // RSA加密
    rsa::encrypt($data);

    // RSA解密
    rsa::decrypt($data);

    // RSA签名
    rsa::sign($data);

    // RSA验签
    rsa::verify($data, $sign);

js加密来源于开源项目jsencrypt

发表评论

textsms
account_circle
email

空城-最好的安排

利用RSA对前后端加密的探索
RSA-JS-PHP 项目地址rsa-js-php 前后端交互时为了保证信息安全可使用RSA方式加密信息,在数据量大的时候可采用DES+RSA结合方式。DEMO演示地址 一点历史 1976年以前,所有的加密方法都是…
扫描二维码继续阅读
2018-07-05