首页
开发手册
应用中心
工具
用户中心
FoundPHP 加密握手协议
中文简体
中文简体
English
上一篇
下一篇
### FoundPHP 加密握手协议 FoundPHP 为开发者提供了加密算法,包含php自带的可以让用户更快更方便的使用,这里讲解我们如何开发自己的加密方案。 #### 开发加密库 握手协议一般要遵循可以加密,没有密钥则不可以解密的原则,也就是必须有1组或多组的密钥,将字符加密为不可识别方式,这样就算拿到了密钥也无法使用。 加密的算法需要在多种编程语言下可实现,比如php与js,php与java,php与go,php与app,这样才能实现有效握手,否则只能叫做单向加密。 通常操作的方案: 1. 字符编码 2. 字符替换 3. 字符加密+顺序转换 4. 压缩字符+编码 #### 1. 字符编码 将字符编码为可以解码的编码,例如base64,但是因为没有密钥,所以加密的字符都可以解密。这个时候可以采用多一种的加密方式,来套在base64外层,造成解码的难度,通常都很容易解码。 #### 2. 字符替换 同样用base64进行加密,但是在这里对base64中的多个字符进行替换,替换成自己知道的字符,切记替换不可替换1个字符,而是多个字母进行替换,否则无法解码,这种在大量数据下还是有规律可以解码的。 #### 3. 字符加密+顺序转换 这里我们同样用base64加密,但是我们需要用切除字符进行改变编码顺序,通常base64的结尾存在=的符号,我们需要用`str_replace('=','FpEd',$base64);` 把=替换为FpEd,替换完成后我们获得字符的长度,将字符拆成2个部分,并且将顺序进行更换。 例如加密:FoundPHP Framework Buliding. 加密结果:Rm91bmRQSFAgRnJhbWV3b3JrIEJ1bGlkaW5nLg== 加密干扰:Rm91bmRQSFAgRnJhbWV3b3JrIEJ1bGlkaW5nLgFpEdFpEd 长度:46 我们将加密结果`Rm91bmRQSFAgRnJhbWV3b3JrIEJ1bGlkaW5nLgFpEdFpEd`分成2部分`Rm91bmRQSFAgRnJhbWV3b3J`与`rIEJ1bGlkaW5nLgFpEdFpEd` 这个时候我们换下顺序将两个字符重组得到,在字符2前面加入字符2的长度,这样方便恢复数据 加密结果:23/rIEJ1bGlkaW5nLgFpEdFpEdRm91bmRQSFAgRnJhbWV3b3J 这个时候base64_decode是无法解密的,需要知道我们的算法才可以解密。 示例如下: ``` '; $str = str_replace('=','FpEd',$str); echo '干扰:'.$str.'
'; $len = strlen($str); echo '长度:'.$len.'
'; $leng = (int)$len/2; $str1 = substr($str,0,$leng); $str2 = substr($str,$leng); echo '加密1:'.$str1.'
'; echo '加密2:'.$str2.'
'; $str = strlen($str2).'/'.$str2.$str1; echo '加密结果:'.$str.'
'; //解密数据 $decode = explode('/',$str); //str2的长度 $str_leng = $decode['0']; $str2 = substr($decode['1'],0,$str_leng); $str1 = substr($decode['1'],$str_leng); echo '解密1:'.$str1.'
'; echo '解密2:'.$str2.'
'; //恢复替换的字符 $new_str = str_replace('FpEd','=',$str1.$str2); echo '解码:'.$new_str.'
'; echo '解密:'.base64_decode($new_str); ``` 得到解密的结果: ``` 加密:Rm91bmRQSFAgRnJhbWV3b3JrIEJ1bGlkaW5nLg== 干扰:Rm91bmRQSFAgRnJhbWV3b3JrIEJ1bGlkaW5nLgFpEdFpEd 长度:46 加密1:Rm91bmRQSFAgRnJhbWV3b3J 加密2:rIEJ1bGlkaW5nLgFpEdFpEd 加密结果:23/rIEJ1bGlkaW5nLgFpEdFpEdRm91bmRQSFAgRnJhbWV3b3J 解密1:Rm91bmRQSFAgRnJhbWV3b3J 解密2:rIEJ1bGlkaW5nLgFpEdFpEd 解码:Rm91bmRQSFAgRnJhbWV3b3JrIEJ1bGlkaW5nLg== 解密:FoundPHP Framework Buliding. ``` #### 4. 压缩字符+编码 这种属于比较复杂的方法,需要调用gz压缩方法,对编码进行组合加密、压缩再编码(秘钥配合编码让编码不易解码) 方法比较复杂可以自己研究。