<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[沧海一粟]]></title> 
<link>http://www.dzhope.com/index.php</link> 
<description><![CDATA[Web系统架构与服务器运维,php开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[沧海一粟]]></copyright>
<item>
<link>http://www.dzhope.com/post//</link>
<title><![CDATA[PHP实现区块链技术（转载）]]></title> 
<author>jed &lt;jed521@163.com&gt;</author>
<category><![CDATA[代码编程]]></category>
<pubDate>Wed, 14 Mar 2018 01:01:33 +0000</pubDate> 
<guid>http://www.dzhope.com/post//</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>&lt;?php <br/>/**<br/> * 区块链相关算法<br/> */<br/>class Block<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public $timestamp; //时间<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;public $index; //索引<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public $data; //数据<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public $prevHash; //上一个哈希值<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;public $hash; //当前哈希值<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public function __construct($index, $timestamp, $data, $prevHash = &#039;&#039;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;index = $index;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;timestamp = $timestamp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;data = $data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;prevHash = $prevHash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;hash = $this-&gt;calculateHash();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * 加密算法<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @return string<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public function calculateHash()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return hash(&#039;sha256&#039;, $this-&gt;index . $this-&gt;prevHash . $this-&gt;timestamp . json_encode($this-&gt;data));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/>/**<br/> * 区块链<br/> * Class BlockChain<br/> */<br/>class BlockChain<br/>&#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public $chain = &#91;&#93;; // Block&#91;&#93;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public function __construct()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;chain = &#91;$this-&gt;createGenesisBlock()&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * 创世区块<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @return Block<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public function createGenesisBlock()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new Block(0, &#039;2017-01-23&#039;, &#039;forecho&#039;, &#039;0&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * 获取最新的区块<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @return Block&#124;mixed<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public function getLatestBlock()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $this-&gt;chain&#91;count($this-&gt;chain) - 1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * 添加区块<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @param Block $newBlock<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public function addBlock(Block $newBlock)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newBlock-&gt;prevHash = $this-&gt;getLatestBlock()-&gt;hash;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newBlock-&gt;hash = $newBlock-&gt;calculateHash();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array_push($this-&gt;chain, $newBlock);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * 验证区块链<br/>&nbsp;&nbsp;&nbsp;&nbsp; * @return bool<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;public function isChainValid()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ($i = 1; $i &lt; count($this-&gt;chain); $i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$currentBlock = $this-&gt;chain&#91;$i&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$prevBlock = $this-&gt;chain&#91;$i - 1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($currentBlock-&gt;hash !== $currentBlock-&gt;calculateHash()) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($currentBlock-&gt;prevHash !== $prevBlock-&gt;hash) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/>// test<br/>$blockChain = new BlockChain();<br/>$blockChain-&gt;addBlock(new Block(1, &#039;2017-02-23&#039;, &#91;&#039;amount&#039; =&gt; 1&#93;));<br/>$blockChain-&gt;addBlock(new Block(2, &#039;2017-03-23&#039;, &#91;&#039;amount&#039; =&gt; 3&#93;));<br/>$blockChain-&gt;addBlock(new Block(3, &#039;2017-04-23&#039;, &#91;&#039;amount&#039; =&gt; 20&#93;));<br/>print_r($blockChain);<br/>echo &quot;区块链验证通过吗？&quot; . ($blockChain-&gt;isChainValid() ? &#039;通过&#039; : &#039;失败&#039;) . PHP_EOL;<br/>$blockChain-&gt;chain&#91;1&#93;-&gt;data = &#91;&#039;amount&#039; =&gt; 2&#93;;<br/>$blockChain-&gt;chain&#91;1&#93;-&gt;hash = $blockChain-&gt;chain&#91;1&#93;-&gt;calculateHash();<br/>echo &quot;区块链验证通过吗？&quot; . ($blockChain-&gt;isChainValid() ? &#039;通过&#039; : &#039;失败&#039;) . PHP_EOL;<br/><br/></div>
]]>
</description>
</item><item>
<link>http://www.dzhope.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP实现区块链技术（转载）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.dzhope.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>