资讯专栏INFORMATION COLUMN

利用RSA对前后端加密的探索

banana_pi / 708人阅读

摘要:项目地址前后端交互时为了保证信息安全可使用方式加密信息,在数据量大的时候可采用结合方式。由于加密和解密使用同样规则简称密钥,这被称为对称加密算法。从那时直到现在,算法一直是最广为使用的非对称加密算法。

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=5x17=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:httpphpextrassslopenssl.cnf(根据openssl.cnf目录而定);

生成新的公私钥文件在项目根目录命令行运行:

php rsa.php new

保护好私钥,确保私钥不被暴露在web可访问目录下;

将生成的rsa_pubkey.js引入值web项目中,具体请运行DEMO演示即可;

rsa.class.php的使用:

// 初始化参数,设置公钥与私钥的路径
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

本文出自个人博客 最好的安排 转载请注明出处!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28226.html

相关文章

  • node中密码安全

    摘要:后端解密后端核心代码注意要放在处理路由前不加会报错解密注意这里的常量值要设置为加密输入到数据库中的密码是存入数据库中这里,我是用自带模块进行解密,当然,你也可以用的方法进行解密。 本文将讲解对于前后端分离的项目,前端注册或登录时如何保证用户密码安全传输到server端,最终存入数据库 为什么需要加密 加密真的有必要吗?我们先来看一看前端发起的ajax请求中,如果不对密码进行加密,会发生...

    Wildcard 评论0 收藏0
  • 回眸曾经项目,与第三方支付相关,所带来沟通问题

    摘要:钱可以存储在自己的余额中,这就相当于微信钱包,余额可以提现到银行卡的中。我们的第三方支付平台是连连支付,杭州的一家公司。私钥怎么加签每个公司的加签方式是不一样的,支付宝有支付宝的加签方式,微信有微信的加签方式。 导读 笔者在校期间,通过自学java。学校里也开过这门课,但是,讲的都是一些基础,比如java的表达式、基本类型、自定义类型等等。也都是很基础的东西,就连lambda表达式都没...

    kaka 评论0 收藏0
  • 手动实现一个jsonwebtoken

    摘要:利用消息认证码可以确保消息不是被别人伪造的,消息认证码是带密钥的函数,由于有了一个,所以会比有更好的安全性。所以需要采用的就是算法,该算法主要利用的是不对称加密算法,利用私钥进行签名,公钥验证数据的完整性。 写在前面 本文会到你了解jwt的实现原理,以及base64编码的原理。同时本人也简单的实现了一下jwt的生成,点这里。 jwt是什么 本质上它是一段签名的 JSON 格式的数据。由...

    zhangke3016 评论0 收藏0
  • Swoole 源码分析——Server模块之OpenSSL (上)

    摘要:另一方比如小明得到公钥之后,双方就可以通信。然而,中间人还是可能截获公钥,然后自己弄一对秘钥,然后告诉小明说是小红的公钥。这样,小亮在签署小红的身份证的时候,可以在小红身份证后面附上自己的身份证。一般来说,自签名的根身份证用于公司内部使用。 前言 自从 Lets Encrypt 上线之后,HTTPS 网站数量占比越来越高,相信不久的未来就可以实现全网 HTTPS,大部分主流浏览器也对 ...

    ky0ncheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<