RSA密码传输加密方案_第1页
RSA密码传输加密方案_第2页
RSA密码传输加密方案_第3页
RSA密码传输加密方案_第4页
RSA密码传输加密方案_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、RSA密码传输加密方案对应的【鲁能集团泰山度假俱乐部产品展示系统安全功能初测观察报告】中的(5,6)5)數据亢整性注;已核要求.对用户名和密码进行统一加密.加密方式为RSA.加密宇袴不可解密b)数据禿整性校验i)it不箝今用户口令在储存和传输过程白未使用国密算法进行加密(妥求:逢议使用国密算法进行金整性保护)cj数据秃整性保护i)中不符台(使用burpsuiw截取登录包.修及口令倍息,系统未能检测出数堀被篡改(要求:被检较件应订X检测出左整性错误并在检测到死整住错误时采取必姜的恢复措施)6)数据保密性注;己按要求.登录进行传输加密.加密方式为RSA.字符不可解密切数据传输保密性i)高不符合(匚

2、令数捋在隹输过程中为明文传输(爰求I建议佚用国密算法迸行保密性保护)町数据存储保密11i)高不苻合用户口令在储存过程中未做保密性措施(妄求:建议使用国密算住进行陰有完整性保护)诉)注*己按要求将密码存储方式由隔来的AIDS改为Passnoid_hasli方式述行存储互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求)、数据完整性(没有被人修改过)、数据私密性(密文,无法直接读取)等。虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是

3、需要我们使用加密方法来手动加密。虽然对于一般的WEB开发人员来说,大可不必深入了解一些安全相关的底层技术,但学习加密基础知识,使用现有加密相关工具却十分必要。由于工作需要,自己看了些加密相关文章,结合自己的使用经历,完成此文。RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德李维斯特(RonRivest)、阿迪萨莫尔(AdiShamir)和伦纳德阿德曼(LeonardAdleman)起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。加密基础学习如何使用加密之前,我们需要了解一些加密相关的基础知识。加

4、密算法一般分为两种:对称加密算法和非对称加密算法。对称加密对称加密算法是消息发送者和接收者使用同一个密匙,发送者使用密匙加密了文件,接收者使用同样的密匙解密,获取信息。常见的对称加密算法有:des/aes/3des.对称加密算法的特点有:速度快,加密前后文件大小变化不大,但是密匙的保管是个大问题,因为消息发送方和接收方任意一方的密匙丢失,都会导致信息传输变得不安全。非对称加密与对称加密相对的是非对称加密,非对称加密的核心思想是使用一对相对的密匙,分为公匙和私匙,私匙自己安全保存,而将公匙公开。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只

5、有用对应的公钥才能解密。发送数据前只需要使用接收方的公匙加密就行了。常见的非对称加密算法有RSA/DSA:非对称加密虽然没有密匙保存问题,但其计算量大,加密速度很慢,有时候我们还需要对大块数据进行分块加密。数字签名为了保证数据的完整性,还需要通过散列函数计算得到一个散列值,这个散列值被称为数字签名。其特点有:无论原始数据是多大,结果的长度相同的;输入一样,输出也相同;对输入的微小改变,会使结果产生很大的变化;加密过程不可逆,无法通过散列值得到原来的数据;常见的数字签名算法有md5,hash1等算法。PHP的openssl扩展openssl扩展使用openssl加密扩展包,封装了多个用于加密解密

6、相关的PHP函数,极大地方便了对数据的加密解密。常用的函数有:对称加密相关:stringopenssl_encrypt(string$data,string$method,string$password)其中$data为其要加密的数据,$method是加密要使用的方法,$password是要使用的密匙,函数返回加密后的数据;其中$method列表可以使用openssl_get_cipher_methods()来获取,我们选取其中一个使用,$method列表形如:其解密函数为stringopenssl_encrypt(string$data,string$method,string$passwo

7、rd)非对称加密相关:openssl_get_publickey();openssl_pkey_get_public();/从证书导出公匙;openssl_get_privatekey();openssl_pkey_get_private();/从证书导出私匙;它们都只需要传入证书文件(一般是.pem文件);openssl_public_encrypt(string$data,string&$crypted,mixed$key,int$padding=OPENSSL_PKCS1_PADDING)使用公匙加密数据,其中$data是要加密的数据;$crypted是一个引用变量,加密后的数据会被放入

8、这个变量中;$key是要传入的公匙数据;由于被加密数据分组时,有可能不会正好为加密位数bit的整数倍,所以需要$padding(填充补齐),$padding的可选项有OPENSSL_PKCS1_PADDING,OPENSSL_NO_PADDING,分另U为PKCS1填充,或不使用填充;与此方法相对的还有(传入参数一致):openssl_private_encrypt();/使用私匙加密;openssl_private_decrypt();/使用私匙解密;openssl_public_decrypt();/使用公匙解密;还有签名和验签函数:boolopenssl_sign(string$data

9、,string&$signature,mixed$priv_key_id,mixed$signature_alg=OPENSSL_ALGO_SHA1)intopenssl_verify(string$data,string$signature,mixed$pub_key_id,mixed$signature_alg=0PENSSL_ALG0_SHA1)签名函数:$data为要签名的数据;$signature为签名结果的引用变量;$priv_key_id为签名所使用的私匙;$signature_alg为签名要使用的算法,其算法列表可以使用openssl_get_md_methods()得到形如:

10、验签函数:与签名函数相对,只不过它要传入与私匙对应的公匙;其结果为签名验证结果,1为成功,0为失败,-1则表示错误;加密流程传输流程:传输过程中rsa加密用户名和口令,md5密钥加密用户名和口令和验证码,对比的时候是把传输的rsa解密加上验证码,再进行md5验证JS加密代码:varpublic_key=;varpublic_length=0 x10001;functiondo_encrypt()varrsa=newRSAKey();rsasetPublic(public_key,public_length);varres=rsaencrypt(username=+$(#username)val

11、()+&password=+$(#password)val();varres_cap=;if($(#captcha)val()res_cap=rsaencrypt($(#captcha)val();-if(res&res_cap)$(#sign)val($md5(username=+$(#username)val()+&password=+$(#password)val()+$(#captcha)val();varresult=hex2b64(res);$(#data)val(result);$(#captcha_hidden).val(hex2b64(res_cap);$(#loginfor

12、m).submit();returntrue;服务端生成一组公钥与私钥,将公钥发送给客户端进行密码加密,在使用密钥进行解密,相关代码:Rsa.phpclassRsa/openssl生成秘钥时的e的值public$rsae;/openssl生成的modulus,十六进制数据public$rsa_modules;publicfunction_construet()$this-rsae=0 x10001;$this-rsa_modules=BB3DC79A95B19C104EE49F592EBA635A3FA6CC6380F8CFF8D2A65E04724AE9C4ACB8E6CDA15B75BC5

13、B94B21CBD6F433B7396E1B52D32F5B610453C49AFD7F39355086250695698B0281032DEADDCA3938AF8590DE6458FAD597DB1C3D9F53D5171968FCF2EE042D99B57414BF376793979A4951DEDBD80E84679EC5CDDAC3C65;*param$data要加密的字符串param$private_key公钥returnmixed加密的结果*/publicfunctionpublicDecrypt($data,$public_key)$public_key=file_get_co

14、ntents($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私钥returnmixed解密的结果*/publicfunctionprivateDecrypt($data,$private_key)$encryp

15、ted=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=newRsa();$captcha=request_post(captcha);$decrypt_cap=$rsa-privateDecrypt($ca

16、ptcha,$this-_configrsa_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-_configrsa_private_key);if(!$decrypt_data)$this-systemlog(信息验证错误,请重新登录,0,4);sendmail_windows($this-datawebsetadmin_email,有管理员有登录异常操作,管理员登录时签名信息被篡改,请检查,登录时间date(Y-m-dH:i:s);$this-jump(信息错误,请重新登录,site_url(admincp/login),2);parse_str($decrypt_data,$form_data);$username=tr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论