<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[php SHA-256加密算法实现,DES,AES,有一个加密解密的钥匙。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 16 Aug 2011 03:44:50 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<textarea name="code" class="php" rows="15" cols="100">
&lt; ?php&nbsp;&nbsp;
$str = &quot;我的名字是？一般人我不告诉他！&quot;;&nbsp;&nbsp; 
//加密内容&nbsp;&nbsp;
$key = &quot;key:111&quot;;&nbsp;&nbsp; 
//密钥&nbsp;&nbsp;
$cipher = MCRYPT_DES;&nbsp;&nbsp;
//密码类型&nbsp;&nbsp;
$modes = MCRYPT_MODE_ECB;&nbsp;&nbsp;
//密码模式&nbsp;&nbsp;
$iv = mcrypt_create_iv(mcrypt_get_iv_size
($cipher,$modes),MCRYPT_RAND);//初始化向量&nbsp;&nbsp;
echo &quot;加密明文：&quot;.$str.&quot;&lt;p&gt;&quot;;&nbsp;&nbsp;
$str_encrypt = mcrypt_encrypt($cipher,
$key,$str,$modes,$iv);&nbsp;&nbsp;
//加密函数&nbsp;&nbsp;
echo &quot;加密密文：&quot;.$str_encrypt.&quot; &lt;p&gt;&quot;;&nbsp;&nbsp;
$str_decrypt = mcrypt_decrypt($cipher,
$key,$str_encrypt,$modes,$iv);&nbsp;&nbsp;
//解密函数&nbsp;&nbsp;
echo &quot;还原：&quot;.$str_decrypt;&nbsp;&nbsp;
?&gt;
</textarea><br/><br/>&lt;1&gt;由例子中可看到，使用PHP加密扩展库Mcrypt对数据加密和解密之前，首先创建了一个初始化向量，简称为iv。由 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);可见创建初始化 向 量需要两个参数：size指定了iv的大小；source为iv的源，其中值MCRYPT_RAND为系统随机数。<br/><br/>&lt;2&gt;函数mcrypt_get_iv_size($cipher,$modes)返回初始化向量大小，参数cipher和mode分别指算法和加 密模式。<br/><br/>&lt;3&gt;加密函数$str_encrypt = mcrypt_encrypt($cipher,$key,$str,$modes,$iv); 该函数的5个参数分 别如下：cipher——加密算法、key——密钥、data(str)——需要加密的数据、mode——算法模式、 iv——初始化向量<br/><br/>&lt;4&gt;解密函数 mcrypt_decrypt($cipher,$key,$str_encrypt,$modes,$iv); 该函数和加密函数的参数几乎 一样，唯一不同的是data，也就是说data为需要解密的数据$str_encrypt，而不是原始数据$str。<br/><br/>注：加密和解密函数中的参数cipher、key和mode必须一一对应，否则数据不能被还原。<br/><br/><br/><br/>从文件中读取内部前30位，s=30，部分加密，密钥：6BB64B04849715D0AB2D57662AE1BC42<br/>hash_hmac(&quot;sha256&quot;,substr($fileContent,0,s),&quot;6BB64B04849715D0AB2D57662AE1BC42&quot;);<br/>如：<br/><textarea name="code" class="html" rows="15" cols="100">
手册：
&lt;?php
echo&nbsp;&nbsp;hash_hmac ( &#039;sha256&#039; ,&nbsp;&nbsp;&#039;The quick brown fox jumped over the lazy dog.&#039; ,&nbsp;&nbsp;&#039;secret&#039; );
?&gt;
</textarea><br/><br/><a href="http://www.jackxiang.com/attachment.php?fid=186" target="_blank"><img src="http://www.jackxiang.com/attachment.php?fid=186" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0" width="950"/></a><br/><br/>http://php.net/manual/zh/function.crypt.php<br/>http://dev.barad-dur.nl/sha256/index.php<br/>http://gsp100.blogcn.com/articles/php-sha-256%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0.html<br/><br/>php des加密解密：<br/><textarea name="code" class="html" rows="15" cols="100">
&lt;?php
//Encrypt Function (编码)
function encrypt($encrypt,$key=&quot;&quot;) &#123;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB ), MCRYPT_RAND );
&nbsp;&nbsp;&nbsp;&nbsp;$passcrypt = mcrypt_encrypt ( MCRYPT_RIJNDAEL_256, $key, $encrypt, MCRYPT_MODE_ECB, $iv );
&nbsp;&nbsp;&nbsp;&nbsp;$encode = base64_encode ( $passcrypt );
&nbsp;&nbsp;&nbsp;&nbsp;return $encode;
&#125;

//Decrypt Function (解码)
function decrypt($decrypt,$key=&quot;&quot;) &#123;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;$decoded = base64_decode ( $decrypt );
&nbsp;&nbsp;&nbsp;&nbsp;$iv = mcrypt_create_iv ( mcrypt_get_iv_size ( MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB ), MCRYPT_RAND );
&nbsp;&nbsp;&nbsp;&nbsp;$decrypted = mcrypt_decrypt ( MCRYPT_RIJNDAEL_256, $key, $decoded, MCRYPT_MODE_ECB, $iv );
&nbsp;&nbsp;&nbsp;&nbsp;return $decrypted;
&#125;
?&gt;
</textarea><br/>调用方法，包含上面的文件：<br/><textarea name="code" class="html" rows="15" cols="100">
echo decrypt(encrypt(&quot;jackxiang&quot;,&quot;jack&quot;),&quot;jack&quot;);
</textarea><br/>执行看是否得到了：<br/><textarea name="code" class="html" rows="15" cols="100">
root@116.255.139.240:/home/admin/php# php code.php
jackxiang
</textarea>&nbsp;&nbsp;<br/>PHP之AES加密：<br/>AES是RIJNDAEL的一个子集，固定为RIJNDAEL_128（加密算法）。<br/>其中加密模式有很多种，CBC，CFB等。每种加密模式又有不同种的加密模块段。<br/>aes-cfb在PHP和JAVA中默认是8bit的。<br/>在flash和C++中256bit的。<br/>在PHP中实现加密的为Mcrypt，默认为8bit的。<br/>那么怎么样可以实现AES的256bit块的加密呢，新版的PHP5.3.3以及以上的openssl这个组件有这样的一个函数：openssl_encrypt()<br/>base64加密：<br/><textarea name="code" class="html" rows="15" cols="100">
&lt;?php
$str = &#039;This is an encoded string&#039;;
echo base64_encode($str).&quot;&#92;n&quot;;
$str = &#039;VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==&#039;;
echo base64_decode($str).&quot;&#92;n&quot;;
?&gt;
</textarea><br/>结果：<br/><textarea name="code" class="html" rows="15" cols="100">
VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==
This is an encoded string
</textarea><br/>http://blog.csdn.net/shushengsky/article/details/4961861<br/><a href="attachment.php?fid=188">点击这里下载文件</a>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] php SHA-256加密算法实现,DES,AES,有一个加密解密的钥匙。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>