参考链接:http://www.cnblogs.com/firstForEver/p/5803940.html

自己封装的一个类:

  1. <?php
  2.  
  3. class CRsaAuthorization
  4. {
  5.  
  6. public static $public_key='-----BEGIN PUBLIC KEY-----
  7. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCzNqnKnUn6S7WkOPQroM1rkh7j
  8. nofhvUiWjU8N4RrHtnTW4FPz1540EXTP6n2+ohK5r1AujFaLLIk9PsM+guWY5iKk
  9. 9AoeLOSlDCX66ubuOnt0UpMK0pXwFrBl/M9FNNVVbfA/dWxbM65akhsLLB46o8/v
  10. 2oHdArVF4DVrh4rIhQIDAQAB
  11. -----END PUBLIC KEY-----';
  12.  
  13. private static $pu_key;
  14. private static $pi_key;
  15.  
  16. private $licence;
  17.  
  18. function __construct()
  19. {
  20.  
  21. self::$pu_key=openssl_pkey_get_public(self::$public_key);
  22. // var_dump(self::$pu_key);
  23.  
  24. }
  25.  
  26. // public function get_public_key(){
  27.  
  28. // }
  29.  
  30. public function setPuKey($public_key){
  31.  
  32. self::$pu_key=openssl_pkey_get_public($public_key);
  33.  
  34. }
  35.  
  36. public function setPiKey($private_key){
  37. self::$pi_key = openssl_pkey_get_private($private_key);
  38. }
  39.  
  40. public function privateDecrypt($encrypted = ''){
  41.  
  42. // if (!is_string($encrypted)) {
  43. // return ;
  44. // }
  45.  
  46. $split = str_split($encrypted, 172);// 1024bit 固定172
  47. foreach ($split as $part) {
  48. $isOkay = openssl_private_decrypt(base64_decode($part), $de_data, self::$pi_key);// base64在这里使用,因为172字节是一组,是encode来的
  49. if(!$isOkay){
  50. return false;
  51. }
  52. $decode_data .= $de_data;
  53. }
  54. return $decode_data;
  55.  
  56. }
  57.  
  58. public function publicDecrypt($encrypted = '')
  59. {
  60. if (!is_string($encrypted)) {
  61. return ;
  62. }
  63.  
  64. // $encrypted = substr($encrypted,5);
  65. $encrypted = substr($encrypted,0,-5);
  66.  
  67. // echo $encrypted;
  68.  
  69. $size=strlen($encrypted);
  70. // echo $size;
  71. $result="";
  72. for($i=0;$i<($size/172);$i++)
  73. {
  74. $data=substr($encrypted,$i*172,172);
  75. // echo $data."---------";
  76. if((openssl_public_decrypt(base64_decode($data), $decrypted, self::$pu_key)))
  77. {
  78. $result.=$decrypted;
  79. // echo $result;
  80. }
  81. else{
  82. // echo "decrypt failed";
  83. $result = "";
  84. }
  85. }
  86. return $result;
  87. }
  88.  
  89. public function publicEncrypt($originalData){
  90.  
  91. $split = str_split($originalData, 100);// 1024bit && OPENSSL_PKCS1_PADDING 不大于117即可
  92. foreach ($split as $part) {
  93. $isOkay = openssl_public_encrypt($part, $en_data, self::$pu_key);
  94. if(!$isOkay){
  95. return false;
  96. }
  97. // echo strlen($en_data),'<br/>';
  98. $encode_data .= base64_encode($en_data);
  99. }
  100. return $encode_data;
  101.  
  102. }
  103.  
  104. public function md5Checked($data,$parseLicence)
  105. {
  106.  
  107. $uid = exec('awk -F "=" \'/product_uuid/{print $2}\' /etc/save_env',$output,$ret);
  108. if(empty($uid)) echo "获取uuid失败";
  109.  
  110. // $data =
  111. // $uid = "faf6d7fda265a4c65416009164398372d12f1f3d7f4cac2f";
  112.  
  113. $chkstr=json_encode($data).$uid;
  114.  
  115. // echo $chkstr."<br>";
  116. $strmd5=md5($chkstr);
  117.  
  118. // echo "----".$strmd5."<br>";
  119.  
  120. $licence="";
  121.  
  122. for($i=1;$i<strlen($strmd5);$i=$i+2)
  123. {
  124. $licence .=strtoupper($strmd5[$i]);
  125. }
  126.  
  127. // echo "licence:".$licence;
  128.  
  129. if($licence!=$parseLicence){
  130. return false;
  131. }else{
  132. return true;
  133. }
  134.  
  135. }
  136.  
  137. }
  138.  
  139. ?>

php rsa理解的更多相关文章

  1. java-信息安全(六)-基于RSA理解数字签名示例

    概述 java-信息安全(四)-数据签名.数字证书 java-信息安全(五)-非对称加密算法RSA RSA工具类 使用java-信息安全(五)-非对称加密算法RSA项目中RSACoder 数字签名理解 ...

  2. PJzhang:国内常用威胁情报搜索引擎说明

    猫宁!!! 参考链接: https://www.freebuf.com/column/136763.html https://www.freebuf.com/sectool/163946.html 如 ...

  3. 更多细节的理解RSA算法

    一.概述 RSA算法是1977年由Ron Rivest.Adi Shamir 和 Leonard Adleman三人组在论文A Method for Obtaining Digital Signatu ...

  4. RSA算法笔记+理解

    明天网络安全考试了,看了一下午,还没理解透,持续更新... 质数: 除了1和它本身以外不再有其他因素的数互质关系: 两个正整数,除了1以外,没有其他公因子RSA实现了非对称加密DES实现了对称加密** ...

  5. 怎么理解RSA算法

    原文地址:http://www.ittenyear.com/414/rsa/ 怎么理解RSA算法 能够把非对称加密算法里的公钥想象成一个带锁的箱子,把私钥想象成一把钥匙 能够把对称加密算法里的密钥想象 ...

  6. RSA算法理解

    RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新来的同事对它不太了解,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深的数学理论能够被容易地理解.我们经 ...

  7. 彻底理解RSA加密算法

    RSA是非常典型的非对称加密算法 它的算法是这样的 加密是我们把明文M转化成密文C 需要用到加密运算 而解密时我们要用解密运算将密文C转化成M 从表达式中 可以看出 e和d使我们需要确定的参数 而N是 ...

  8. [已解决] 快速理解RSA算法

    RSA算法基础详解 http://www.cnblogs.com/hykun/p/RSA.html RSA算法原理(一) http://www.ruanyifeng.com/blog/2013/06/ ...

  9. 再谈加密-RSA非对称加密的理解和使用

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

随机推荐

  1. BZOJ2716 [Violet]天使玩偶(cdq分治+树状数组)

    非常裸的KD-tree.然而我没学啊. 考虑如何离线求一个点在平面中的曼哈顿最近点. 绝对值显得有点麻烦,于是把绝对值拆开分情况讨论一波.对于横坐标小于该点的,记录对于纵坐标的前缀x+y最大值和后缀x ...

  2. IDEA 快捷键修改(长期更新)

    最近误操作,导致idea的快捷键没了. 痛定思痛,打算记录一下,以前修改过的key map 搜索一下就好了: 1  代码格式化 -- reformat code:Ctrl+Alt+L(如果按了没反应, ...

  3. Network POJ - 3694 (连通图标求桥)

    有上述两个数组定义可知:对于某点root,其有一儿子v,则有: 1.     如果dfn[root]<=low[v]此点是割点(对于dfs树的根,即最初节点需要两个儿子才是割点) 2.      ...

  4. Codeforces Round #426 (Div. 2) A,B,C

    A. The Useless Toy 题目链接:http://codeforces.com/contest/834/problem/A 思路: 水题 实现代码: #include<bits/st ...

  5. get改post

    //原模式,get 入参只能小于260字符 location.href = hrefStr; localhost/getinfo/UUSDDJSKDJSJKJK 后台 getinfo(string i ...

  6. python构建bp神经网络_曲线拟合(一个隐藏层)__1.可视化数据

    1.将数据写入csv文件,应该可以python代码直接实现数据集的写入,但我对文件读取这块不太熟练,等我成功了再加上,这里我直接手写将数据集写入Excel 2.然后把后缀改成.csv就可以了,利用pa ...

  7. 线段树分治总结(线段树分治,线段树,并查集,树的dfn序,二分图染色)

    闲话 stO猫锟学长,满脑子神仙DS 网上有不少Dalao把线段树分治也归入CDQ分治? 还是听听YCB巨佬的介绍: 狭义:只计算左边对右边的贡献. 广义:只计算外部对内部的贡献. 看来可以理解为广义 ...

  8. 【更新】搭建 Zookeeper-3.4.11 集群

    先准备好三台linux(虚拟机). 1. 先把Java环境配好.我CentOS-7-x86_64-DVD-1708 + jdk1.8.0_161 1.1 先把jdk上传到系统里面(我利用的Filezi ...

  9. DOM表格操作

    注意:就算代码中不包含<tbody>标签,浏览器解析时也可能会自动添加,因此需要注意子元素的选择 表格操作用到的属性: 1.tHead 2.tBodies 3.tFoot 更为细致的有: ...

  10. 也谈同步异步I/O

    也谈同步异步I/O [转自: http://www.smithfox.com/?e=191 ] I/O Model 是一个很大的话题, 也是一个实践性很强的事情, 网上有各种说法和资料, 我们必须用辩 ...