Yii 实现数据加密和解密的示例代码_php实例

来源:脚本之家  责任编辑:小易  

拜托:老大,你的家庭作业也来问?你自己学吧:下面是课文^RSA加密算法该算法于1977年由美国麻省理工学院MIT(Massachusetts Institute of Technology)的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和Adlernan命名为RSA算法。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。与Diffie-Hellman算法相比,RSA算法具有明显的优越性,因为它无须收发双方同时参与加密过程,且非常适合于电子函件系统的加密。RSA算法可以表述如下:(1)密钥配制。假设m是想要传送的报文,现任选两个很大的质数p与q,使得:(12-1);选择正整数e,使得e与(p-1)(q-1)互质;这里(p-1)(q-1)表示二者相乘。再利用辗转相除法,求得d,使得:(12-2);其中x mod y是整数求余运算,其结果是x整除以y后剩余的余数,如5 mod 3=2。这样得:(e,n),是用于加密的公共密钥,可以公开出去;以及(d,n),是用于解密的专用钥匙,必须保密。(2)加密过程。使用(e,n)对明文m进行加密,算法为:(12-3);这里的c即是m加密后的密文。(3)解密过程。使用(d,n)对密文c进行解密,算法为:(12-4);求得的m即为对应于密文c的明文。RSA算法实现起来十分简捷,据说英国的一位程序员只用了3行Perl程序便实现了加密和解密运算。RSA算法建立在正整数求余运算基础之上,同时还保持了指数运算的性质,这一点我们不难证明。例如:(12-5);(12-6)。RSA公共密钥加密算法的核心是欧拉(Euler)函数ψ。对于正整数n,ψ(n)定义为小于n且与n互质的正整数的个数。例如ψ(6)=2,这是因为小于6且与6互质的数有1和5共两个数;再如ψ(7)=6,这是因为互质数有1,2,3,5,6共6个。欧拉在公元前300多年就发现了ψ函数的一个十分有趣的性质,那就是对于任意小于n且与n互质的正整数m,总有mψ(n)mod n=1。例如,5ψ(6)mod 6=52 mod 6=25 mod 6=1。也就是说,在对n求余的运算下,ψ(n)指数具有周期性。当n很小时,计算ψ(n)并不难,使用穷举法即可求出;但当n很大时,计算ψ(n)就十分困难了,其运算量与判断n是否为质数的情况相当。不过在特殊情况下,利用ψ函数的两个性质,可以极大地减少运算量。性质1:如果p是质数,则ψ(p)=(p-1)。性质2:如果p与q均为质数,则ψ(p·q)=ψ(p)·ψ(q)=(p-1)(q-1)。RSA算法正是注意到这两条性质来设计公共密钥加密系统的,p与q的乘积n可以作为公共密钥公布出来,而n的因子p和q则包含在专用密钥中,可以用来解密。如果解密需要用到ψ(n),收信方由于知道因子p和q,可以方便地算出ψ(n)=(p-1)(q-1)。如果窃听者窃得了n,但由于不知道它的因子p与q,则很难求出ψ(n)。这时,窃听者要么强行算出ψ(n),要么对n进行因数分解求得p与q。然而,我们知道,在大数范围内作合数分解是十分困难的,因此窃密者很难成功。有了关于ψ函数的认识,我们再来分析RSA算法的工作原理:(1)密钥配制。设m是要加密的信息,任选两个大质数p与q,使得;选择正整数e,使得e与ψ(n)=(p-1)(q-1)互质。利用辗转相除法,计算d,使得ed mod ψ(n)=,即ed=kψ(n)+1,其中k为某一正整数。公共密钥为(e,n),其中没有包含任何有关n的因子p和q的信息。专用密钥为(d,n),其中d隐含有因子p和q的信息。(2)加密过程。使用公式(12-3)对明文m进行加密,得密文c。(3)解密过程。使用(d,n)对密文c进行解密,计算过程为:cd mod n=(me mod n)d mod nmed mod nm(kψ(n)+1)mod n(mkψ(n)mod n)·(m mod n)mm即为从密文c中恢复出来的明文。例如,假设我们需要加密的明文代码信息为m=14,则:选择e=3,p=5,q=11;计算出n=p·q=55,(p-1)(q-1)=40,d=27;可以验证:(e·d)mod(p-1)(q-1)=81 mod 40=1;加密:c=me mod n=143 mod 55=49;解密:m=cd mod n=4927 mod 55=14。关于RSA算法,还有几点需要进一步说明:(1)之所以要求e与(p-1)(q-1)互质,是为了保证 ed mod(p-1)(q-1)有解。(2)实际操作时,通常先选定e,再找出并确定质数p和q,使得计算出d后它们能满足公式(12-3)。常用的e有3和65537,这两个数都是费马序列中的数。费马序列是以17世纪法国数学家费马命名的序列。(3)破密者主要通过将n分解成p·q的办法来解密,不过目前还没有办法证明这是唯一的办法,也可能有更有效的方法,因为因数分解问题毕竟是一个不断发展的领域,自从RSA算法发明以来,人们已经发现了不少有效的因数分解方法,在一定程度上降低了破译RSA算法的难度,但至今还没有出现动摇RSA算法根基的方法。(4)在RSA算法中,n的长度是控制该算法可靠性的重要因素。目前129位、甚至155位的RSA加密勉强可解,但目前大多数加密程序均采用231、308甚至616位的RSA算法,因此RSA加密还是相当安全的。据专家测算,攻破512位密钥RSA算法大约需要8个月时间;而一个768位密钥RSA算法在2004年之前无法攻破。现在,在技术上还无法预测攻破具有2048位密钥的RSA加密算法需要多少时间。美国Lotus公司悬赏1亿美元,奖励能破译其Domino产品中1024位密钥的RSA算法的人。从这个意义上说,遵照SET协议开发的电子商务系统是绝对安全的www.zgxue.com防采集请勿采集本网。

在Yii中又很多的数据我们不能够以明文进行存储和展示,例如密码和一些比较重要的文件信息,这时候我们都需要我们对这些信息进行加密

DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;RC2和RC4:用变长密钥对大量数据

一:对密码进行加密和验证客户端传输的密码是否正确

至于使用js在post前加密从原理上来说是根本没有意义的,就像你说的,js是明文的,所以破解并不难。如果你要开发的应用对安全性有要求,建议采用ssl方式即可,如果对安全性要求极高,选择安全控件。事实上

1:对密码进行加密

⑹ 表示层表示层负责管理数据的编码方法,对数据进行加密和解密、压缩和恢复。并不是每个计算机都使用相同的数据编码方案,表示层提供不兼容数据编码格式之间的转换,如转换美国标准信息交换代码(ASCII)

$hash = Yii::$app->getSecurity()->generatePasswordHash($password);

你想要哪种加密算法?我所知道的有DES和MD5加密。要的话hi我。

2:对客户端传递的密码进行验证,判断是否正确

表示层:是参考模型的第6层。主要功能是:用于处理在两个通信系统中交换信息的表示方式,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。

//$password:客户端传递的明文密码,$hash:对密码进行加密后的哈希值 if (Yii::$app->getSecurity()->validatePassword($password, $hash)) { // 验证成功(密码正确) } else { // 验证失败(密码错误) }

二:生成一个伪随机数据

在我们进行密码重置的时候,我们经常会发送一份邮件到用户邮箱中,给他一个重置的密码,这时候我们就可以使用Yii的伪随机数据方法给用户生成一个伪随机数据作为密码

//默认生成32为随机字符,可以指定位数生成指定位数的伪随机数 $key = Yii::$app->getSecurity()->generateRandomString();

三:Yii常见的数据加密和解密

Yii常见的加密方法有:encryptByPassword()和encryptByKey()

Yii常见的解密方法有:decryptByPassword()和decryptByKey()

1:encryptByPassword()和decryptByPassword()

加密:

//$data:需要加密的信息,$secretKey:加密时使用的密钥(key) $encryptedData = Yii::$app->getSecurity()->encryptByPassword($data, $secretKey);

解密:

//$encryptedData:需要解密的信息,$secretKey:加密时使用的密钥(key) $data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $secretKey);

1:encryptByKey()和decryptByKey()

加密:

//$data:需要加密的信息,$secretKey:加密时使用的密钥(key) $encryptedData = Yii::$app->getSecurity()->encryptByKey($data, $secretKey);

解密:

//$encryptedData:需要解密的信息,$secretKey:加密时使用的密钥(key) $data = Yii::$app->getSecurity()->decryptByKey($encryptedData, $secretKey);

因为网路传输的过程中存在信息传输的安全性,而通过数据的加密可以在一定程度上提高数据传输的安全,保证传输数据的完整性内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • yii2中关于加密解密的那些事儿
  • php 字符串编码截取函数(兼容utf-8和gb2312)
  • 浅谈关于php解决图片无损压缩的问题
  • js代码实现微博导航栏
  • php开源开发框架zendframework使用中常见问题说明及解决方案
  • laravel csrf排除路由,禁止,关闭指定路由的例子
  • qq登录,新浪微博登录接口申请过程中遇到的问题
  • laravel5.6框架使用ckeditor5相关配置详解
  • 推荐个功能齐全的发送php邮件类
  • thinkphp3.1之d方法实例详解
  • laravel框架学习笔记之批量更新数据功能
  • 数据在网络上传输为什么要加密?现在常用的数据加密算法主要有哪些?
  • 用RSA对下列数据实现加密和解密:
  • 用JAVA设计一个简单的加密、解密算法,用该算法来实现对数据的加密、解密
  • 非对称加密和对称加密的区别
  • 加密算法有哪些
  • POST数据加密问题
  • OSI参考模型中哪些是负责对数据的加密和解密?
  • 用Java实现IDEA数据加密解密
  • 数据加密可以在OSI七层模型中的( )完成的
  • 加密和解密技术是属于计算机安全技术的什么层次
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程php实例yii2中关于加密解密的那些事儿php 字符串编码截取函数(兼容utf-8和gb2312)浅谈关于php解决图片无损压缩的问题js代码实现微博导航栏php开源开发框架zendframework使用中常见问题说明及解决方案laravel csrf排除路由,禁止,关闭指定路由的例子qq登录,新浪微博登录接口申请过程中遇到的问题laravel5.6框架使用ckeditor5相关配置详解推荐个功能齐全的发送php邮件类thinkphp3.1之d方法实例详解laravel框架学习笔记之批量更新数据功能php获取数组长度的方法(有实例)微信公众平台实现获取用户openid教你如何使用php session使用php生成二维码的两种方法(带php发送get、post请求的6种方法简php中把stdclass object转array的微信公众平台网页授权获取用户基laravel框架数据库curd操作、连贯php字符串的连接的简单实例php删除数组中空值的方法介绍php使用递归生成文章树linux系统下php安装mbstring扩展的二种方thinkphp框架类库扩展操作示例yii2中restful api原理实例分析yii2增加验证码步骤详解php中url函数介绍及使用示例php 微信扫码支付源代码(推荐)合并thinkphp配置文件以消除代码冗余的实thinkphp使用utfwry地址库进行ip定位实例php include类文件超时问题处理
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved