<?phpinclude_once "inc/conn.php";
include_once "inc/utility_all.php";
include_once "inc/check_type.php";
$HTML_PAGE_TITLE = _("邮箱新建与更新");
include_once "inc/header.inc.php";
echo "<body class=\"bodycolor\">\r\n\r\n";$EMAIL_PASS="webmailpass";
$EMAIL_PASS = td_authcode($EMAIL_PASS);
//$EMAIL_PASS = td_authcode_new($EMAIL_PASS);
echo $EMAIL_PASS."<br>";
$EMAIL_PASS = td_authcode($EMAIL_PASS, "DECODE");
//$EMAIL_PASS = td_authcode_new($EMAIL_PASS, "DECODE");
echo $EMAIL_PASS."<br>";
echo "</body>\r\n</html>\r\n";function td_authcode_new($string, $operation = '', $key = '', $expiry = 0) {// 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙$ckey_length = 4;// 密匙$key = md5($key ? $key : "53c1fb88217737c98daf47e664f3180e");// 密匙a会参与加解密$keya = md5(substr($key, 0, 16));// 密匙b会用来做数据完整性验证$keyb = md5(substr($key, 16, 16));// 密匙c用于变化生成的密文$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';// 参与运算的密匙$cryptkey = $keya.md5($keya.$keyc);$key_length = strlen($cryptkey);// 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性// 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确$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') {// substr($result, 0, 10) == 0 验证数据有效性// substr($result, 0, 10) - time() > 0 验证数据有效性// substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) 验证数据完整性// 验证数据有效性,请看未加密明文的格式if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {return substr($result, 26);} else {return '';}} else {// 把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因// 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码return $keyc.str_replace('=', '', base64_encode($result));}
}
?>

通达OA外部邮件密码加密和解密的方式,可以参考用作其他相关推荐

  1. 详解密码学中几种常见密码加密与解密

    目录 题目 凯撒加密法 代码实现 维吉尼亚密码 栅栏密码 矩阵置换密码 点击直接资料领取 题目 11.已知明文:MEET ME AFITER THE TOGO PARTY,分别用以下方法加密,写出加密 ...

  2. python - 密码加密与解密

    Python之密码加密与解密 - 对称算法 一.对称加密 1.1 安装第三方库 - PyCrypto 1.2 加密实现 二.非对称加密 三.摘要算法 3.1 md5加密 3.2 sha1加密 3.3 ...

  3. 5.3使用凯撒密码加密和解密英文文件python

    1本关任务:使用凯撒密码加密和解密英文文件.具体要求如下: (1)接收一个字符串为参数,如果参数值为加密,要求用户输入一个要加密的文件名,再输入一个单词做为密钥发生器,用于计算偏移量,对文件中的内容进 ...

  4. Java版 凯撒密码 加密、解密、暴力破解

    Java版 凯撒密码 加密.解密.暴力破解 用Java实现凯撒密码的 '加密' 和 '解密' 工作 代码实现如下: 代码片 package com.hellow.demo;import java.ut ...

  5. 如何在 Linux 上用密码加密和解密文件

    age 是一个简单的.易于使用的工具,允许你用一个密码来加密和解密文件.age 能帮你这样做.它是一个小型且易于使用的工具,允许你用一个密码加密一个文件,并根据需要解密. age 是一个简单的.易于使 ...

  6. 信息安全之仿射密码加密和解密

    本文利用仿射密码,对一个只含可打印字符的txt文件进行加密和解密. //加解密时,文件内容为所有可打印字符,即ASCII码从32-126的95个字符 #include<iostream> ...

  7. C#中使用MD5对用户密码加密与解密

    C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...

  8. 简单混淆密码加密和解密

    最近项目比较多,就很少写文章.随着项目的收尾.时间也开始比较充裕起来了. 我们在编程过程当中.经常遇见到算法,那到底什么是算法呢. 比方:如果我把密码加密存到数据库,读取的时候再解密还原. 这个过程就 ...

  9. 简单的MD5密码加密和解密方法

    MD5的算法是不可逆的,MD5被广泛用于密码验证和消息体完整性验证. 下面的例子用到了密码加密和登陆时的解密的基本方法.当然这样很容易被暴力破解,可以做其他改进,如先设计一个足够复杂的密码,然后将他的 ...

最新文章

  1. 注释(Annotation)
  2. Qt多线程中的信号与槽
  3. Windows 运行... 可执行的命令
  4. vue搭建后可以改下全局配置
  5. 基于spring+quartz的分布式定时任务框架
  6. dup_val_on_index_oracle学习笔记(十六) PL/SQL 异常和goto语句
  7. python的自省基础
  8. 用C语言描述数据结构
  9. c语言ascii码16进制,C语言附录ASCII码表.doc
  10. 开启memcached日志
  11. Mac制作启动U盘解决重启按option不能识别的问题
  12. 魔兽世界3区部落最多的服务器,魔兽世界怀旧服玩家为你推荐,不用排队、非鬼服非单阵营的服务器...
  13. 点绕坐标系旋转旋转矩阵推导、理解
  14. Springboot母婴店购物系统9j5v8计算机毕业设计-课程设计-期末作业-毕设程序代做
  15. Logism · 汉字字库存储芯片扩展 实验
  16. MICROS RES安装
  17. 如何写好年度总结PPT? by 傅一平
  18. 2008年10月12号中午出品:【广外专版QQ远程聊天记录查看器】
  19. matlab 仿真元件封装,利用M文件与封装模块简化Simulink仿真模型.pdf
  20. 个人永久性免费-Excel催化剂功能第59波-快速调用Windows内部常用工具命令

热门文章

  1. 产品经理面试问题:上一家公司的离职原因
  2. C++问题汇总(一)
  3. 考研数学高数1-1综合测试-函数及其性质
  4. 用Python+OpenCV+PyQt开发的答题卡识别软件
  5. 使用PyTorch构建GAN生成对抗网络源码(详细步骤讲解+注释版)02 人脸识别 上
  6. ologit模型与logit_Logit模型和Logistic模型有什么区别?
  7. objective-c语言特点及基础(相较于C语言)
  8. BLDC/PMSM 电机的堵转保护
  9. Python 绘制反高斯光束光强分布
  10. ArcGIS 常见拓扑错误的修改方法