- 浏览: 141930 次
- 性别:
- 来自: 北京
文章分类
最新评论
<?php /** * Description of Imgauthcode * * @author fantom * @time 2012-4-23 */ final class authcode { private static $_instance; private $_ckey_length = 12; //随机密钥长度 private $_keya; //密匙a会参与加解密 private $_keyb; //用来做数据完整性验证 private $_keyc; //_密匙c用于变化生成的密文 (初始化向量IV) private $_cryptkey; //运算的密匙 private $_result; //与预处理串 private $_str; //明文或密文 private $_key; //密钥 // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 (初始化向量IV) // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。(实际上就是iv) // 取值越大,密文变动规律越大,密文变化 = 16 的 $this->_ckey_length 次方 // 当此值为 0 时,则不产生随机密钥 private $_expiry; //密文有效期 /** * 私有构造函数 * @param author fantom * @param time 2012-04-23 */ private function __construct() { } /** * 私有克隆函数 * @param author fantom * @param time 2012-04-23 */ private function __clone() { } /** * 单件入口 * @param author fantom * @param time 2012-04-23 */ static public function getInstance() { if (isset(self::$_instance) || is_null(self::$_instance)) { self::$_instance = new authcode(); } return self::$_instance; } /** * //__set()方法用来设置私有属性 * @param author fantom * @param time 2012-04-23 */ public function __set($privateName, $value) { $this->$privateName = $value; } /** * //__get()方法用来获取私有属性 * @param author fantom * @param time 2012-04-23 */ public function __get($privateName) { if (isset($this->$privateName)) { return($this->$privateName); } else { return null; } } /** * 加密|解密分支第一部分 * @param author fantom * @param time 2012-04-23 */ private function cryptstart() { // 密匙 $key = md5($this->_key); // 密匙a会参与加解密 $this->_keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $this->_keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 (初始化向量IV) return $this; } /** * 加密|解密分支第二部分 * @param author fantom * @param time 2012-04-23 */ private function cryptAfter() { // 参与运算的密匙 $this->_cryptkey = $this->_keya . md5($this->_keya . $this->_keyc); $key_length = strlen($this->_cryptkey); $string_length = strlen($this->_str); $boxArr = range(0, 255); $rndkeyArr = array(); // 产生密匙簿 for ($i = 0; $i <= 255; $i++) { $rndkeyArr[$i] = ord($this->_cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for ($j = $i = 0; $i < 256; $i++) { $j = ($j + $boxArr[$i] + $rndkeyArr[$i]) % 256; $tmp = $boxArr[$i]; $boxArr[$i] = $boxArr[$j]; $boxArr[$j] = $tmp; } // 核心加解密部分 for ($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $boxArr[$a]) % 256; $tmp = $boxArr[$a]; $boxArr[$a] = $boxArr[$j]; $boxArr[$j] = $tmp; // 从密匙簿得出密匙进行异或,再转成字符 $this->_result .= chr(ord($this->_str[$i]) ^ ($boxArr[($boxArr[$a] + $boxArr[$j]) % 256])); } return $this; } /** * // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性 * @param author fantom * @param time 2012-04-23 */ private function encryptCode() { // 密匙c用于变化生成的密文 $this->_keyc = $this->_ckey_length ? substr(md5(microtime()), -$this->_ckey_length) : ''; $this->_str = sprintf('%010d', $this->_expiry ? $this->_expiry + time() : 0) . substr(md5($this->_str . $this->_keyb), 0, 16) . $this->_str; return $this; } /** * 加密后返回串 * @param author fantom * @param time 2012-04-23 */ private function encryptResult() { return $this->_keyc . str_replace('=', '', base64_encode($this->_result)); } /** * 解码,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 * @param author fantom * @param time 2012-04-23 */ private function decryptCode() { $this->_keyc = $this->_ckey_length ? substr($this->_str, 0, $this->_ckey_length) : ''; $this->_str = base64_decode(substr($this->_str, $this->_ckey_length)); return $this; } /** * 解密后返回明文 * @param author fantom * @param time 2012-04-23 */ private function decryptResult() { if ((substr($this->_result, 0, 10) == 0 || substr($this->_result, 0, 10) - time() > 0) && substr($this->_result, 10, 16) == substr(md5(substr($this->_result, 26) . $this->_keyb), 0, 16)) { return substr($this->_result, 26); } else { return null; } } /** * 检测属性是否有值 * @param author fantom * @param time 2012-04-23 */ private function checkAttribute() { $privateArr = $this->privateArr(); foreach ($privateArr as $key => $value) { if ($value == false) { continue; } if (!$this->$key) { include_once(ROOT_PATH . 'lib/log.class.php'); //加密解密 log::write(__FILE__ . ' ::' . __LINE__ . "行 {$key}属性没有设置值"); exit; } } return $this; } /** * 需要设置属性的名称 * @param author fantom * @param time 2012-04-23 */ private function privateArr() { return array( '_str' => true, //true为必需属性,false为必需属性 '_key' => true, '_expiry' => false, ); } /** * 设置必需属性 * @param author fantom * @param time 2012-04-23 */ public function setprivateArr($arr) { foreach ($arr as $key => $value) { if (property_exists($this, $key)) { $this->$key = $value; } } return $this; } /** * 执行加密入口 * @param author fantom * @param time 2012-04-23 */ public function doencryptcode() { return $this->checkAttribute()->cryptstart()->encryptCode()->cryptAfter()->encryptResult(); } /** * 执行解密入口 * @param author fantom * @param time 2012-04-23 */ public function dodecryptcode() { return $this->checkAttribute()->cryptstart()->decryptCode()->cryptAfter()->decryptResult(); } }
使用方法-:
$arr = array('_str'=>_MAJORPRODUCTID,'_key'=>_AUTHKEY,'_expiry'=>100); $strcode=authcode::getInstance()->setprivateArr($arr)->doencryptcode();加密 $arr = array('_str'=>_MAJORPRODUCTID,'_key'=>_AUTHKEY); $strcode=authcode::getInstance()->setprivateArr($arr)->dodecryptcode();解密
使用方法二:
$arr = array('_str'=>_MAJORPRODUCTID,'_key'=>_AUTHKEY,'_expiry'=>100); $strcodes = authcode::getInstance(); $strcodes->_str = _PRODUCTID; $strcodes->_key = _AUTHKEY; $strcodes->_expiry = 100; $strcode = $strcodes->doencryptcode(); //加密
发表评论
-
vld 安装 使用
2012-03-19 13:25 2049安装 1、 wget http://pecl.php.net/ ... -
编译php 错误
2012-03-19 09:53 754make: *** [ext/fileinfo/libmagi ... -
phpunit安装问题
2011-08-05 14:06 1262今天试了一下安装phpunit 结果发现问题不少,我得方法是用 ... -
yii 目录结构{转}
2011-07-07 15:57 871本帖最后由 浩劫 于 20 ... -
soap
2011-07-06 10:56 1127在windows下的php.ini文件里 找到这一行代码(如 ... -
yii 目录结构
2011-07-05 08:16 2435testdrive/ index.php ...
相关推荐
exe程序加密器修改D
"加密PDF修改软件"是专门针对这类需求设计的工具,它能够帮助用户解密并修改受保护的PDF文件。这种软件通常具备以下关键功能: 1. **PDF解密**:软件首先需要能够识别和处理各种类型的PDF加密,包括40位和128位RC4...
Herom2内置加密脚本解密工具修改版 解密HEROM2引擎的加密脚本
<br>举例说明:例如,本加密工具安装在c:\hideasoft\java_protect,执行加密后的CLASS文件的命令行如下: java -agentlib:c:\hideasoft\java_protect\hidea <您的CLASS类及参数> 应用场合 独立的应用...
内容概要:nacos1.1.4版本修改源码使用非对称加密算法RSA进行用户名和密码加密传输。 适用人群:需要适用nacos作为项目注册中心的相关人员、内网用户。 适用场景:linux或者windows系统,使用nacos作为注册中心,...
除了基本的加密功能,高级的文件夹加密软件还可能包含其他特性,例如隐藏文件夹、自毁机制、防止未经许可的修改或复制、日志记录等。这些增强功能进一步增强了数据的保护。 总的来说,文件夹加密软件绿色版是一种...
基于sqlite3的加密版本的数据库动态链接库,附lib和.h头文件,新测试可用。可设置密码和修改密码,加密后的数据库文件是无法被打开的。官方提供的免费版本sqlite3都是没有加密的,官方收费的很贵哦,有需要的朋友...
v1.8.9(内测版) 新增API接口开通新增设置开通api接口价格新增qq互联登录新增sg11支持批量加密修复注册验证失败BUG修复加密乱码报错BUG优化xend加密优化api接口提交优化sg11加密 V1.8 1.更新资源网系统 2.更新ENPHP...
"wdb php水晶修改加密版.zip"这个压缩包文件名暗示了它包含了一个经过修改和加密的PHP版本,可能是为了保护源代码或者增强系统的安全性。"wdb"可能是一个项目名称、团队代号或者开发者的缩写,而"水晶"可能是这个...
这类配置文件通常包含了加密算法的选择、密钥的管理以及一些自定义选项,用户可以根据实际需求进行调整,以达到最佳的加密效果和安全性。 在实际应用中,用户应根据自身软件的特性选择合适的加密级别,以平衡安全性...
agentlib:c:\windows\JLoader %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。 2.独立的Java应用程序 在您的应用程序运行参数中加入以下内容: -agentlib:的存放目录>\JLoader ...
自动加密机制是该软件的核心特性,它可以在用户保存或修改文件时自动应用加密算法,无需用户手动操作。这种透明化的过程既方便又高效,使得数据安全与日常工作效率得到了平衡。用户不再需要担心忘记加密重要文件,...
java -agentlib:c:\lanswonsoft\java_protect\lanswon <您的CLASS类及参数> 应用场合 独立的应用程序(Application,自定义main方法),运行java时,带上参数-agentlib:<所在路径>\lanswon Tomcat等JAVA Web ...
在IT领域,我们经常遇到各种系统和应用的配置问题,其中“数据未加密,挂载参数被修改”是一个常见的安全警告。这个问题涉及到数据保护、存储系统以及系统挂载的正确配置。下面将详细阐述相关知识点。 首先,我们要...
phpspy2013个人修改版,加密过免杀 非官方发布,增加一些功能,Filemanage增加非FSO模式,增加文件打包 登陆页面伪造、代码压缩加密 登陆页面shell.php?doing=login,密码:admin
EXE文件加密器是一款专为保护可执行程序(EXE文件)设计的安全工具,主要用于增强文件的安全性,防止未经授权的访问、修改或复制。增强版VIP2是该软件的一个高级版本,提供了更多功能和更强的加密算法,以确保程序...
目前唯一能修改加密PDF文件的foxit 福昕软件,其他的福昕版本不能修改,只有此版本可以修改加密PDF文件!
v1.8.9(内测版) 新增API接口开通新增设置开通api接口价格新增qq互联登录新增sg11支持批量加密修复注册验证失败BUG修复加密乱码报错BUG优化xend加密优化api接口提交优化sg11加密 安装教程: 环境:PHP版本必须7.X...
如果不设置用户密码,用户将可以直接查看加密的文件夹,但禁止复制、删除和拷贝。...支持移动硬盘:可以直接加密移动硬盘上的数据,用户可以浏览里面的文件,但无法修改,复制,删除。 适用于文档演示,资料出售等情况
1. 防盗版:加密锁的存在使得软件只能在插入了正确加密锁的设备上运行,有效防止了非法复制和分发。 2. 动态授权管理:通过写锁工具,可以实现授权的动态调整,如增加或减少功能,或者根据时间限制使用期限。 3. ...