php as 对称加解密

对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法.有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来.而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法.它要求发送方和接收方在安全通信之前,商定一个密钥.对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要.
在项目中经常会遇到php加密解密算法,最近项目需要一个AS3和php的加解密算法,经过努力,终于完成了.只要密钥相同,AS3和php就能互相加密解密.现备注下:

/**
 *字符串加解密函数 php
 *@param string $string    字符串
 *@param string $operation ENCODE:加密 DECODE:解密 默认:ENCODE
 *@param string $key       密钥:数字 字母 下划线
*/
function sysAuthCode($string,$operation='ENCODE',$key= 'keychenai'){
 if($operation='DECODE') $string = base64_decode($string);

 $len = strlen($key);
 $strlen = strlen($string);
 $code = '';
 for($i = 0;$i < $strlen;$i++){
  $k = $i % $len;
  //关键点:AS与php在位移的不同就是as不能处理0的位移,而php可以处理,因此必须加1,直接绕过as中因0出现bug的可能性
  $code .= chr(ord($string[$i]) ^ ord($key[$k]) +1);
 }
 if($operation='DECODE') $code = base64_encode($code);
 return $code;
}
$aa = sysAuthCode('wangying','ENCODE');
var_dump($aa);
$bb = sysAuthCode($aa,'DECODE');
var_dump($bb);

对位运算^(按位异或)存在疑惑可参考:对php位运算^(按位异或)的理解

/**
 *字符串加解密函数 AS3
 *@param string string    字符串
 *@param string operation ENCODE:加密 DECODE:解密 默认:ENCODE
 *@param string key       密钥:数字 字母 下划线
*/
package
{
 import flash.display.Sprite;
 import flash.utils.ByteArray;
 import mx.utils.Base64Decoder;
 import mx.utils.Base64Encoder;
 import flash.utils.Endian;
 /**
  * ...
  * @author
  */
 public class Main extends Sprite
 {
  public function Main()
  {
   trace(sysAuthCode("wangying","ENCODE"));
   trace(sysAuthCode("RVJaVUpdXFQ.","DECODE"));
  }
  //解码
  private function decode(str:String = null):String
  {
   var base64:Base64Decoder;
   base64 = new Base64Decoder();
   base64.decode(str);
   var temp:String = base64.toString();
   return temp;
  }
  //加密
  private function encode(str:String):String
  {
   var b64Str:String;
   var base64:Base64Encoder = new Base64Encoder();
   base64.encode(str);
   b64Str = base64.toString();
   return b64Str;
  }

  /*
   * str:String(加密后的一个字符串)
   * operation:String(变量)
   * key:String(键值)
   * */
  public function sysAuthCode(str:String = null, operation:String = "ENCODE", key:String = "keychenai"):String
  {
   if (operation == 'DECODE')
   {
    str = decode(str);
   }

   var keyLength:Number = key.length;
   var strLength:Number = str.length;
   var code:String = "";
   for (var i:uint = 0; i < strLength; i++)
   {
    var k:Number = i % keyLength;
    //关键点:AS与php在位移的不同就是as不能处理0的位移,而php可以处理,因此必须加1,直接绕过as中因0出现bug的可能性
    code += String.fromCharCode(str.charCodeAt(i) ^ key.charCodeAt(k) + 1);
   }

   if (operation == 'ENCODE')
   {
    code =  encode(code);
   }
   return code;
  }

 }

}

附录:AS base64 加密解密库

www.it4test.com
200-120-exam-questions
350-001-exam-questions
350-018-exam-questions
350-030-exam-questions
640-461-exam-questions
648-266-exam-questions
648-244-exam-questions
648-232-exam-questions
646-580-exam-questions
646-048-exam-questions
070-465
070-466
070-467
070-480
070-483
220-301
220-303
220-603
220-702
220-902

200-120
210-260
210-260-practice-test
200-310-practice-test
200-310
810-403
300-320
300-320-practice-test
400-101
400-101-practice-test
70-533-practice-test
MB2-707-practice-test
210-060
210-060-practice-test
400-201-practice-test
350-018-practice-test
70-461
www.eci.org.il
300-206-practice-test
352-001-practice-test
PR000041-practice-test
300-208
300-208-vce-dumps
itilfnd
AX0-100
220-802
70-494
700-501-practice-test
A2070-581

相关文章
  1. $_GET,$_POST与urldecode的使用风险
  2. yii2框架的错误处理
  3. Yii2过滤器-behaviors()行为调用
  4. 密码保护:PHP多进程编程
  5. 全排列算法原理和实现
  6. PHP静态方法和非静态方法的使用场景
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in php, 加密解密算法, 编程语言
Comments are closed.