php 可逆加密方法

可以逆转的加密类,没有密钥很难破解

[PHP]代码

<?

class encryptCalss
{
var $key=12;
function encode($txt){
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=chr(ord($txt[$i])+$this->key);
}
return $txt=urlencode(base64_encode(urlencode($txt)));
}
function decode($txt){
$txt=urldecode(base64_decode($txt));
for($i=0;$i<strlen($txt);$i++){
$txt[$i]=chr(ord($txt[$i])-$this->key);
}
return $txt;
}
}

?>

discuz加密解密

<?php
/**
 *
 * @param string $string 原文或者密文
 * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
 * @param string $key 密钥
 * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
 * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
 * @example
 *   $a = authcode(‘abc‘, ‘ENCODE‘, ‘key‘);
 *   $b = authcode($a, ‘DECODE‘, ‘key‘);  // $b(abc)
 *
 *   $a = authcode(‘abc‘, ‘ENCODE‘, ‘key‘, 3600);
 *   $b = authcode(‘abc‘, ‘DECODE‘, ‘key‘); // 在一个小时内,$b(abc),否则 $b 为空
 */
function authcode($string,$operation=‘DECODE‘,$key=‘‘,$expiry=0){

    $ckey_length=4;

    $key=md5($key ? $key:"kalvin.cn");
    $keya=md5(substr($key,0,16));
    $keyb=md5(substr($key,16,16));
    $keyc=$ckey_length ? ($operation==‘DECODE‘ ? substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):‘‘;

    $cryptkey=$keya.md5($keya.$keyc);
    $key_length=strlen($cryptkey);

    $string=$operation==‘DECODE‘ ? base64_decode(substr($string,$ckey_length)):sprintf(‘%010d‘,$expiry ? $expiry+time():0).substr(md5($string.$keyb),0,16).$string;
    $string_length=strlen($string);

    $result=‘‘;
    $box=range(0,255);

    $rndkey=array();
    for($i=0;$i<=255;$i++){
        $rndkey[$i]=ord($cryptkey[$i%$key_length]);
    }

    for($j=$i=0;$i<256;$i++){
        $j=($j+$box[$i]+$rndkey[$i])%256;
        $tmp=$box[$i];
        $box[$i]=$box[$j];
        $box[$j]=$tmp;
    }

    for($a=$j=$i=0;$i<$string_length;$i++){
        $a=($a+1)%256;
        $j=($j+$box[$a])%256;
        $tmp=$box[$a];
        $box[$a]=$box[$j];
        $box[$j]=$tmp;
        $result.=chr(ord($string[$i]) ^ ($box[($box[$a]+$box[$j])%256]));
    }

    if($operation==‘DECODE‘){
        if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){
            returnsubstr($result,26);
        }else{
            return‘‘;
        }
    }else{
        return$keyc.str_replace(‘=‘,‘‘,base64_encode($result));
    }

}
?>
时间: 2024-10-10 16:48:45

php 可逆加密方法的相关文章

C#加密方法汇总(SHA1加密字符串,MD5加密字符串,可逆加密等)

using System;using System.Collections.Generic;using System.Text; namespace StringEncry{ class EncodeAndDecode { /// <summary> /// Base64加密 /// </summary> /// <param name="codeName">加密采用的编码方式</param> /// <param name=&qu

转发:C#加密方法汇总

转自:C#加密方法汇总 方法一: 1 //须添加对System.Web的引用 2 using System.Web.Security; 3 ... 4 /// <summary> 5 /// SHA1加密字符串 6 /// </summary> 7 /// <param name="source">源字符串</param> 8 /// <returns>加密后的字符串</returns> 9 public stri

常用加密方法

常用加密方法: 1> base64  2> MD5  3> MD5加盐  4> HMAC  5> 时间戳密码(用户密码动态变化) { 1> base64 { base64 编码是现代密码学的基础. 原本是 8个bit 一组表示数据,改为 6个bit一组表示数据,不足的部分补零,每 两个0 用 一个 = 表示. 用base64 编码之后,数据长度会变大,增加了大约 1/3 左右. base64 基本能够达到安全要求,但是,base64能够逆运算,非常不安全! base64

MD5 不可逆加密,Des对称可逆加密 ,RSA非对称可逆加密 ,数字证书 SSL

:MD5 不可逆加密2:Des对称可逆加密3:RSA非对称可逆加密4:数字证书 SSL Anker_张(博客园)http://www.cnblogs.com/AnkerZhang/ 1:MD5 不可逆加密 using System.IO; using System.Security.Cryptography; using System.Text; namespace EncryptDemo { /// <summary> /// 不可逆加密 /// 1 防止被篡改 /// 2 防止明文存储 /

一组PHP可逆加密解密算法

对于大部分密码加密,我们可以采用md5.sha1等方法.可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密. 对于需要还原的信息,则需要采用可逆的加密解密算法. 下面一组PHP函数是实现此加密解密的方法: 加密算法如下: function encrypt($data, $key) { $key = md5($key); $x = 0; $len = strlen($data); $l = strlen($key); for ($i = 0; $i < $len; $i++) { if

加密方法汇总

1.C#加密算法总结 2.C# 常用加密方法收集 对称,非对称 3.C#使用RSA私钥加密公钥解密的改进,解决特定情况下解密后出现乱码的问题 4.Silverlight中非对称加密及数字签名RSA算法的实现 5.JavaScript DES 加密 6.各种加密解密函数(URL加密解密.sha1加密解密.des加密解密)网页版

好玩的文件加密方法(自己给文件头部加密)

下面是讲解一个给文件加密的小技巧: 先讲下概念:一般系统识别文件的方式大家都会认为是文件的拓展名,比如.txt .mp4等等,是这样的.但是其实很多时候系统识别文件还通过文件的头部(linux下是这样的)~~ 关于上面的概念大家可以测试一下: 比如你有个视频文件叫xxx.mp4,我把文件名改为xxx.mmmm但是系统(win下)右键鼠标,没有打开方式这一项了,但是你依然可以打开:从已安装程序中找到一个播放器(比如迅雷看看)就可以打开了(会有个提示),这说明文件内容跟文件名没有什么关系,废话是吧,

iOS 几种加密方法

iOS常见的几种加密方法 普通加密方法是讲密码进行加密后保存到用户偏好设置中 钥匙串是以明文形式保存,但是不知道存放的具体位置 1.base64加密 base64 编码是现代密码学的基础 基本原理: 原本是 8个bit 一组表示数据,改为 6个bit一组表示数据,不足的部分补零,每 两个0 用 一个 = 表示 用base64 编码之后,数据长度会变大,增加了大约 1/3 左右.(8-6)/6可进行反向解密 Xcode7.0 之后出现的 编码有个非常显著的特点,末尾有个 = 号 将文件进行加密 /

.net系统的MD5加密方法

/// <summary>/// .net系统的MD5加密方法/// </summary>/// <param name="strIN"></param>/// <returns></returns>public string MD5System(string strIN){    return strIN.IsNullOrEmpty() ? "" : System.Web.Security.F