RSA密码传输加密方案

合集下载

RSA加密算法(C语言实现)

RSA加密算法(C语言实现)

RSA加密算法(C语言实现)RSA(Rivest-Shamir-Adleman)算法是一种非对称加密算法,它是目前应用最广泛的加密算法之一、RSA算法基于两个大素数之间的乘积很难分解的特性,并使用公钥和私钥进行加密和解密。

在C语言中实现RSA算法需要进行以下步骤:1.生成大素数p和q:选择两个大素数p和q,它们需要满足p≠q。

这样选取p和q是为了使得计算n=p*q变得困难,保护私钥。

2.计算n:计算n=p*q,n即为公钥和私钥的参数之一3.计算欧拉函数φ(n):计算欧拉函数φ(n)=(p-1)*(q-1)。

4.选择e:选择一个与φ(n)互质且小于φ(n)的整数e作为加密指数,e即为公钥的参数。

5. 计算d:计算d = e^(-1) mod φ(n),d即为私钥的参数。

可以使用扩展欧几里得算法来计算d。

6. 加密:将明文M转换为整数m,加密后的密文C = m^e mod n。

7. 解密:解密密文C得到明文M = C^d mod n。

以下是C语言实现RSA加密算法的代码示例:```c#include <stdio.h>int gcd(int a, int b)if(b == 0)}return gcd(b, a % b);int extendedGcd(int a, int b, int *x, int *y) if(a == 0)*x=0;*y=1;return b;}int x1, y1;int gcd = extendedGcd(b % a, a, &x1, &y1);*x=y1-(b/a)*x1;*y=x1;return gcd;int modInverse(int a, int m)int x, y;int gcd = extendedGcd(a, m, &x, &y);if(gcd != 1)printf("Inverse doesn't exist\n");}return (x % m + m) % m;int powerMod(int x, unsigned int y, int m) if (y == 0)return 1;}int p = powerMod(x, y/2, m) % m;p=(p*p)%m;return (y%2 == 0) ? p : (x*p) % m;int maiint p, q, n, phiN, e, d;//选择两个大素数p和qp=31;q=17;//计算n和φ(n)n=p*q;phiN = (p - 1) * (q - 1);//选择加密指数ee=7;//计算解密指数dd = modInverse(e, phiN);int plaintext = 88;int ciphertext = powerMod(plaintext, e, n);int decryptedtext = powerMod(ciphertext, d, n);printf("Plaintext: %d\n", plaintext);printf("Ciphertext: %d\n", ciphertext);printf("Decryptedtext: %d\n", decryptedtext);return 0;```在上面的代码中,我们使用了几个辅助函数来实现扩展欧几里得算法、计算模反元素和快速幂算法。

RSA加密方案安全性研究

RSA加密方案安全性研究

RSA加密方案安全性研究【摘要】密码学是信息安全技术的核心,现代密码体制分为公钥体制和私钥体制两大类,私钥又称单钥体制,其加密和解密密钥相同。

公钥体制又称双钥体制,其加密、解密密钥不同,可以公开加密密钥,仅需要保密解密密钥,从而具有数字签名、鉴别等新功能,被广泛应用于金融、商业等社会生活各领域。

RSA是目前公认在理论和实际应用中最为完善的一种公钥密码体制,不仅可以进行加密,还可以用来进行数字签名和身份认证,是公钥密码体制的代表。

【关键词】密码学;数字签名;RSA;公钥密码体制信息加密技术是信息安全技术的核心技术,其主要目的是防止恶意攻击者非法破坏系统中的机密信息。

数据加密技术可以提高信息系统及数据的安全性和保密性,防止秘密数据被外部破译所采用的主要技术之一。

密码学是研究通信安全保密的科学,其目的是保护信息在信道上传输过程中不被他人窃取、解读和利用,它主要包括密码编码学和密码分析学两个相互独立又相互促进的分支。

前者研究将发送的信息(明文)变换成没有密钥不能解或很难解的密文的方法,而后者则研究分析破译密码的方法。

1RSA公钥密码体制原理图1保密系统模型著名的RSA公钥密码体制是在1975年由R.L.Rivest,A.Shamir和L.Adlemen 三人共同提出。

RSA是最具代表性的公钥密码体制。

由于算法完善(既可用于数据加密,又可用于数字签名),安全性良好,易于实现和理解,RSA己成为一种应用极广的公钥密码体制,也是目前世界上唯一被广泛使用的公钥密码。

在广泛的应用中,不仅它的实现技术日趋成熟,而且安全性逐渐得到证明。

公钥密码体制保密系统如图1所示。

该系统应当满足下述要求:①即使达不到理论上是不可破解的,也应当是实际上是不可破解的。

也就是说,从截获的密文或某些己知明文密文对,要确定密钥或任意明文在计算上是不可行的;②保密系统的安全性应依赖于密钥,而不是依赖于密码体制或算法本身的细节的安全性;③加密解密算法实用于所有密钥空间中的元素;④系统应该易于实现和使用方便。

RSA加密算法及实现

RSA加密算法及实现

RSA加密算法及实现RSA加密算法是一种非对称加密算法,广泛应用于网络通信中的数据加密和数字签名等方面。

RSA算法的核心思想是基于大数分解的难解性问题,通过数论中的数学原理实现加密过程。

下面将详细介绍RSA加密算法的原理和实现。

RSA算法的原理如下:1.密钥的生成:-随机选择两个不同的大质数p和q。

-计算n=p*q。

-计算欧拉函数φ(n)=(p-1)*(q-1)。

-选择一个整数e,使得1<e<φ(n),且e与φ(n)互质。

- 计算e关于φ(n)的模反元素d,使得d * e ≡ 1 (modφ(n))。

-公钥为(n,e),私钥为(n,d)。

2.加密算法:-将明文m转化为整数。

- 计算密文c = m^e mod n。

3.解密算法:- 计算明文m = c^d mod n。

1.密钥的生成:首先,使用一个大数库来生成大质数p和q,确保p和q均为质数。

然后,计算n=p*q,并计算φ(n)=(p-1)*(q-1)。

选择一个合适的e,可以是小于φ(n)的质数或者与φ(n)互质的数。

使用扩展欧几里德算法,计算e关于φ(n)的模反元素d。

最终得到公钥为(n,e),私钥为(n,d)。

2.加密算法:将明文m转化为整数。

然后,使用快速模幂算法计算密文c = m^e mod n。

3.解密算法:使用快速模幂算法,计算明文m = c^d mod n。

需要注意的是,RSA算法对加密和解密的数据长度有限制,一般建议将要加密的数据分块进行加密。

同时,为了增强安全性,一般会使用大的素数来生成密钥。

总结:RSA加密算法是一种非对称加密算法,通过数论中的数学原理实现加密过程。

它的核心思想是基于大数分解的难解性问题。

RSA算法的实现需要生成密钥对、加密和解密三个步骤。

密钥的生成需要随机选择两个大质数,并进行相应的计算。

加密算法通过快速模幂算法进行加密,解密算法也通过快速模幂算法进行解密。

RSA算法在实际应用中广泛用于保护数据的机密性和完整性,同时也是数字签名等功能实现的基础。

rsa加密原理

rsa加密原理

rsa加密原理RSA加密算法(RSAencryptionalgorithm)是一种非对称加密算法,属于公钥加密算法中的代表性算法。

1979年,美国研究人员Ron Rivest、Adi Shamir和Leonard Adleman将它发表出来,他们凭着这个算法获得了2002年图灵奖。

RSA加密算法是基于数论研究而来,它不仅可以进行加密,还可以用来进行数字签名和密码学中的验证。

RSA加密算法的基本原理是公钥加密,即发送者使用接收者的公钥对数据进行加密,接收者使用该公钥的私钥对加密后的数据进行解密。

RSA加密算法的基本原理是:1、它视每一个公钥对(Public Key, PK)由两部分组成,称为e和n,其中n是一个大数,而e是小质数,它们都是唯一的并且同时公开的,但是n是一个很大的数,是不可能由人们推断出来的。

2、在RSA加密算法中,发送者使用接收者的公钥来加密信息,而接收者使用自己的私钥进行解密。

加密的前提是:发送者必须知道对方的公钥,而接收者必须记住自己的私钥,在RSA加密算法中,任何人都不可能通过仅有的一个公钥来计算出私钥。

3、在RSA加密算法中,数据是按照单个字节加密,然后被转换为一个二进制文件,信息将会被分割成一个个小段,每个小段都将会按照公钥加密,最终会组合在一起,来储存加密过的文件(Cipher text)。

而解密时,过程刚好相反:将加密后的文件分割成小段,分别按照私钥解密,最终将所有解密后的段组合在一起,恢复原始文本。

4、RSA加密算法的安全性取决于计算机的处理能力,它的安全性体现在:首先,只有拥有接收者的私钥的人才能够解密信息,即使把加密后的信息公开,也不会有安全隐患;其次,暴力破解RSA加密算法也是难以完成的,因为n这个大数是不能被推断出来的。

总之,RSA加密算法具有较高的安全性,可以有效地保护网络安全,是现代信息安全的重要组成部分。

当我们使用网银、购物网站等网络服务时,应该提高对RSA加密算法的安全性的认识,这样才能更好地保护自己的信息安全。

RSA和DES加密算法详解

RSA和DES加密算法详解

RSA和DES加密算法详解RSA加密算法:RSA是一种非对称加密算法,它的安全性基于大数的因数分解难题。

RSA算法的原理如下:1.选择两个不同的质数p和q,并计算它们的乘积n=p*q。

n被称为RSA算法的模数。

2.计算n的欧拉函数φ(n)=(p-1)*(q-1)。

3.选择一个整数e,使得1<e<φ(n),且e和φ(n)互质。

e被称为RSA算法的公钥指数。

4. 计算整数d,使得d*e ≡ 1 (mod φ(n))。

d被称为RSA算法的私钥指数。

5.公钥为(n,e),私钥为(n,d)。

6. 加密消息m时,将m的整数表示x,计算密文c ≡ x^e (mod n)。

7. 解密密文c时,计算明文m ≡ c^d (mod n)。

RSA算法的优点是加密速度较快,且在典型情况下很难被破解。

其主要应用领域包括数据传输中的身份认证、数字签名、数字证书等。

DES加密算法:DES(Data Encryption Standard)是一种对称加密算法,它采用64位的分组长度和56位的密钥长度。

DES算法的原理如下:1.初始置换(IP):将输入的64位明文分为左右两个32位部分。

2.迭代运算:通过16次的迭代运算,先对右半部分进行扩展和异或运算,然后经过S盒置换和P盒置换,最后与左半部分进行异或运算。

3.逆初始置换(IP-1):将得到的64位结果进行逆初始置换得到密文。

4.这里的迭代运算中,用到了轮密钥生成算法。

DES算法的密钥扩展过程中,通过对56位密钥进行位移、选择和置换操作生成各轮所使用的子密钥。

DES算法的缺点是安全性较低,主要是由于其算法密钥长度较短,易受到穷举攻击。

因此在实际应用中,通常采用3DES算法,即对DES算法进行三次加密。

1.对称加密算法DES的加密速度较快,而非对称加密算法RSA的加密速度较慢。

这是因为RSA算法涉及大数的运算,而DES算法仅涉及位运算。

2.DES算法的密钥长度较短,容易受到穷举攻击,安全性较低。

RSA加密算法

RSA加密算法

RSA加密算法RSA 加密算法是一种非对称加密算法,由三位数学家 Rivest、Shamir 和 Adleman 共同提出,采用两个不同的密钥进行加解密。

RSA 算法主要用于保护数据的机密性和完整性,在互联网通信、电子商务、数字签名等领域得到广泛应用。

1.选择两个大的质数p和q,计算n=p*q。

n被称为模数,p和q称为密钥生成的一部分,需要保密。

2.根据欧拉函数φ(n)的性质,计算φ(n)=(p-1)*(q-1)。

3. 选择一个整数 e,使得1 < e < φ(n) 且gcd(e, φ(n)) = 1,e 称为公钥指数。

4. 计算关于模φ(n) 的 e 的乘法逆元素 d,即d * e ≡ 1 (mod φ(n))。

d 称为私钥指数。

5.公钥是(n,e),私钥是(n,d),公钥可以公开,私钥需要保密。

6. 加密过程:将待加密的明文 M 转化为整数 m,在模数 n 下,计算密文 C = m^e mod n。

7. 解密过程:将密文 C 转化为整数 c,在模数 n 下,计算明文 M = c^d mod n。

RSA算法的优点是:1.加密和解密过程分别使用不同的密钥,提高了安全性。

2.非常适合进行数字签名和数字证书的领域应用,能有效抵御冒充和篡改。

3.算法存在的数学难题使得破解困难,强大的安全性能。

然而,RSA算法也有一些缺点:1.加密和解密过程速度较慢,特别是处理大数据量时。

2.密钥的生成和管理需要一定的计算资源和复杂性。

3.对于特定的攻击,如侧信道攻击和选择密码攻击等,RSA算法可能存在风险。

为了提高RSA算法的性能和安全性,通常结合其他的密码学技术,如组合RSA和对称加密算法构成混合加密体制,以克服各自的缺点。

总的来说,RSA加密算法是一种安全可靠的非对称加密算法,具有广泛的应用领域和重要的实际价值,为保障数据的机密性和完整性提供了有效的保护措施。

基于RSA的WEB前端密码加密方案

基于RSA的WEB前端密码加密方案

基于RSA的WEB前端密码加密⽅案受制于WEB页⾯源码的暴露,因此传统的对称加密⽅案以及加密密钥都将暴露在JS⽂件中,同样可以被解密。

⽬前⽐较好的解决⽅案是WEB页⾯全程或⽤户登录等关键环节使⽤HTTPS进⾏传输。

另外⼀种解决⽅案就是通过RSA进⾏加密。

RSA是⼀种⾮对称加密,也就是客户端通过公钥进⾏加密,服务端通过私钥进⾏解密。

也就是说公钥并不能进⾏解密,因此进⾏明⽂传输也是安全的。

1、加密流程服务端⽣成⼀组公钥与私钥,将公钥发送给客户端进⾏密码加密,在使⽤密钥进⾏解密。

2、密钥⽣成(NodeJs)主要使⽤来⽣成RSA公钥、私钥:1 import NodeRSA from 'node-rsa';23 let key=new NodeRSA({b:512});4 let publicDer=key.exportKey('pkcs8-public');5 let privateDer=key.exportKey('pkcs8-private');⼀般在服务器启动的时候可以⽣成⼀组密钥,并缓存起来,⽅便后续解密使⽤!3、密码加密(浏览器端)客户端接收到公钥以后,再提交表单之前对密码进⾏加密传输:1 import NodeRSA from 'node-rsa';234var encryptStr=function(password) {5 let clientKey = new NodeRSA({b: 512});6var publicKey=localStorage.publicKey; //从服务端接收到的公钥,缓存到本地7 clientKey.importKey(publicKey);8 let encrypted = clientKey.encrypt(password, 'base64');9return encrypted;10 }需要注意的问题是:客户端引⼊Node-Rsa库会相对增加JS⽂件体积,请注意上线之前对代码进⾏压缩或者更换其他体积较⼩的RSA类库。

非对称密码算法RSA原理

非对称密码算法RSA原理

非对称密钥加密算法-RSA一.非对称密钥加密概述前面讲述了对称密钥加密体制。

使用对称密钥加密体制进行保密通信时,任意不同的两个用户之间都应该使用互不相同的密钥。

这样,如果一个网络中有n个用户,他们之间彼此可能需要进行秘密通信,这时网络中将共需要n(n-1)/2个密钥(其中,每个用户都需要保存n-1个密钥),这样巨大的密钥量给密钥分配和管理带来了极大的困难。

另外,随着计算机网络,特别是因特网的发展,网络上互不相识的用户可能需要进行保密的会话(例如,如果用户在进行电子商务活动时,需要保密的连接,这时的客户对象可能根本不是固定的对象)。

最后,对称密钥加密机制难以解决签名验证问题。

非对称密钥加密也称为公开密钥加密,或者叫做公钥加密算法。

使用公开密钥密码的每一个用户都分别拥有两个密钥:加密密钥和解密密钥,它们两者并不相同,并且由加密密钥得到解密密钥在计算机上是不可行的。

每一个用户的加密密钥都是公开的(因此,加密密钥也称为公开密钥)。

所有用户的公开密钥都将记录在作用类似于电话号码薄的密钥本上,而它可以被所有用户访问,这样每一个用户都可以得到其他所有用户的公开密钥。

同时,每一个用户的解密密钥将由用户保存并严格保密(因此,解密密钥也称为私有密钥)。

非对称密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。

公钥加密算法一般是将对密钥的求解转化为对数学上的困难问题的求解,例如RSA算法的安全性是建立在“大数分解和素性检测”这个数论难题的基础上,已知两个大素数a、b,求出a*b是容易计算的,而已知a*b,想知道其是哪两个大素数的乘积目前还没有好的计算方法,另外也有一些非对称加密算法(如ELGamal算法)的安全性是基于求“离散对数”这个数学难题上的。

在公钥密码系统中每个实体都有自己的公钥和相应的私钥。

公钥密码系统的加密变换和解密变换分别用E和D表示。

任何实体B要向实体A发送信息m的步骤如下:实体B首先获得实体A的真实公钥的拷贝(eA),实体B使用eA计算密文 c=E(m)并发送给实体A ,实体A使用自己的私钥dA,计算m=D(c)解密密文,恢复出明文m。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RSA密码传输加密方案对应的【鲁能集团泰山度假俱乐部产品展示系统安全功能初测观察报告】中的(5,6)互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等。

虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方法来手动加密。

虽然对于一般的WEB开发人员来说,大可不必深入了解一些安全相关的底层技术,但学习加密基础知识,使用现有加密相关工具却十分必要。

由于工作需要,自己看了些加密相关文章,结合自己的使用经历,完成此文。

RSA加密算法是一种非对称加密算法。

在公钥加密标准和电子商业中RSA被广泛使用。

RSA是1977年由罗纳德•李维斯特(Ron Rivest)、阿迪•萨莫尔(Adi Shamir)和伦纳德•阿德曼(Leonard Adleman)一起提出的。

当时他们三人都在麻省理工学院工作。

RSA就是他们三人姓氏开头字母拼在一起组成的。

加密基础学习如何使用加密之前,我们需要了解一些加密相关的基础知识。

加密算法一般分为两种:对称加密算法和非对称加密算法。

对称加密对称加密算法是消息发送者和接收者使用同一个密匙,发送者使用密匙加密了文件,接收者使用同样的密匙解密,获取信息。

常见的对称加密算法有:des/aes/3des.对称加密算法的特点有:速度快,加密前后文件大小变化不大,但是密匙的保管是个大问题,因为消息发送方和接收方任意一方的密匙丢失,都会导致信息传输变得不安全。

非对称加密与对称加密相对的是非对称加密,非对称加密的核心思想是使用一对相对的密匙,分为公匙和私匙,私匙自己安全保存,而将公匙公开。

公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

发送数据前只需要使用接收方的公匙加密就行了。

常见的非对称加密算法有RSA/DSA:非对称加密虽然没有密匙保存问题,但其计算量大,加密速度很慢,有时候我们还需要对大块数据进行分块加密。

数字签名为了保证数据的完整性,还需要通过散列函数计算得到一个散列值,这个散列值被称为数字签名。

其特点有:∙无论原始数据是多大,结果的长度相同的;∙输入一样,输出也相同;∙对输入的微小改变,会使结果产生很大的变化;∙加密过程不可逆,无法通过散列值得到原来的数据;常见的数字签名算法有md5,hash1等算法。

PHP的openssl扩展openssl扩展使用openssl加密扩展包,封装了多个用于加密解密相关的PHP函数,极大地方便了对数据的加密解密。

常用的函数有:对称加密相关:string openssl_encrypt ( string $data , string $method , string $password)其中$data为其要加密的数据,$method是加密要使用的方法,$password是要使用的密匙,函数返回加密后的数据;其中$method列表可以使用openssl_get_cipher_methods()来获取,我们选取其中一个使用,$method列表形如:其解密函数为string openssl_encrypt ( string $data , string $method , string $password)非对称加密相关:它们都只需要传入证书文件(一般是.pem文件);使用公匙加密数据,其中$data是要加密的数据;$crypted是一个引用变量,加密后的数据会被放入这个变量中;$key是要传入的公匙数据;由于被加密数据分组时,有可能不会正好为加密位数bit的整数倍,所以需要$padding(填充补齐),$padding的可选项有OPENSSL_PKCS1_PADDING, OPENSSL_NO_PADDING,分别为PKCS1填充,或不使用填充;与此方法相对的还有(传入参数一致):还有签名和验签函数:验签函数:与签名函数相对,只不过它要传入与私匙对应的公匙;其结果为签名验证结果,1为成功,0为失败,-1则表示错误;加密流程传输流程:传输过程中rsa加密用户名和口令,md5密钥加密用户名和口令和验证码,对比的时候是把传输的rsa解密加上验证码,再进行md5验证JS加密代码:<scriptlanguage="JavaScript"type="text/javascript"src="/static/web/js /rsa/jsbn.js"></script><scriptlanguage="JavaScript"type="text/javascript"src="/static/web/js /rsa/prng4.js"></script><scriptlanguage="JavaScript"type="text/javascript"src="/static/web/js /rsa/rng.js"></script><scriptlanguage="JavaScript"type="text/javascript"src="/static/web/js /rsa/rsa.js"></script><scriptlanguage="JavaScript"type="text/javascript"src="/static/web/js /rsa/base64.js"></script><scripttype="text/javascript"src="/static/web/js/md5.js"></script> <script language="JavaScript">varpublic_key="<?='BB3DC79A95B19C104EE49F592EBA635A3FA6CC6380F8CF F8D2A65E04724AE9C4ACB8E6CDA15B75BC5B94B21CBD6F433B7396E1B52D32 F5B610453C49AFD7F39355086250695698B0281032DEADDCA3938AF8590DE6 458FAD597DB1C3D9F53D5171968FCF2EE042D99B57414BF376793979A4951D EDBD80E84679EC5CDDAC3C65'?>";var public_length="0x10001";function do_encrypt() {var rsa = new RSAKey();rsa.setPublic(public_key, public_length);var res =rsa.encrypt('username='+$('#username').val()+'&password='+$('# password').val());var res_cap = '';if($('#captcha').val()){res_cap = rsa.encrypt($('#captcha').val());}if(res && res_cap) {$('#sign').val($.md5('username='+$('#username').val()+'&passwo rd='+$('#password').val() + $('#captcha').val()));var result = hex2b64(res);$('#data').val(result);$('#captcha_hidden').val(hex2b64(res_cap));$('#loginform').submit();}return true;}服务端生成一组公钥与私钥,将公钥发送给客户端进行密码加密,在使用密钥进行解密,相关代码:Rsa.phpclass Rsa{//openssl生成秘钥时的e的值public $rsae;//openssl生成的modulus,十六进制数据public $rsa_modules;public function __construct() {$this->rsae = '0x10001';$this->rsa_modules ='BB3DC79A95B19C104EE49F592EBA635A3FA6CC6380F8CFF8D2A65E04724AE 9C4ACB8E6CDA15B75BC5B94B21CBD6F433B7396E1B52D32F5B610453C49AFD 7F39355086250695698B0281032DEADDCA3938AF8590DE6458FAD597DB1C3D 9F53D5171968FCF2EE042D99B57414BF376793979A4951DEDBD80E84679EC5 CDDAC3C65';}/*** @param $data 要加密的字符串* @param $private_key 公钥* @return mixed 加密的结果*/public function publicDecrypt($data, $public_key){$public_key = file_get_contents($public_key);$pub_key = openssl_pkey_get_public($public_key);openssl_public_encrypt($data,$encrypted,$pub_key); $encrypted=base64_encode($encrypted);//因为加密后是乱码,所以base64一下return $encrypted;}/*** @param $data 要解密的字符串* @param $private_key 私钥* @return mixed 解密的结果*/public function privateDecrypt($data, $private_key){ $encrypted = base64_decode($data);$private_key = file_get_contents($private_key);$pi_key = openssl_pkey_get_private($private_key);openssl_private_decrypt($encrypted,$decrypted,$pi_key); return $decrypted;}}控制器实现:$this->load->library('Rsa');$rsa = new Rsa();$captcha = request_post('captcha');$decrypt_cap = $rsa->privateDecrypt($captcha,$this->_config['rsa_private_key']);if (strtolower($this->session->userdata('captcha')) !=strtolower($decrypt_cap)) {$this->message('验证码不正确', site_url($this->siteclass . '/' . $this->sitemethod), 2);}$decrypt_data = $rsa->privateDecrypt($this->input->post('data', true), $this->_config['rsa_private_key']);if (!$decrypt_data) {$this->systemlog('信息验证错误,请重新登录', 0, 4);sendmail_windows($this->data['webset']['admin_email'], '有管理员有登录异常操作', '管理员登录时签名信息被篡改,请检查,登录时间' . date('Y-m-d H:i:s'));$this->jump('信息错误,请重新登录', site_url('admincp/login'), 2); }parse_str($decrypt_data, $form_data);$username = trim($form_data['username']);$password = trim($form_data['password']);//验证传输有效性$sign = request_post('sign');$make_sign = md5($decrypt_data . strtolower($decrypt_cap));if ($make_sign != $sign) {$this->systemlog('登录时签名可能被篡改', 0, 4);$this->jump('信息错误,签名信息不正确', site_url('admincp/login'), 2);}鲁能泰山度假俱乐部管理有限公司。

相关文档
最新文档