

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>password &#8211; Max的程式語言筆記</title>
	<atom:link href="https://stackoverflow.max-everyday.com/tag/password/feed/" rel="self" type="application/rss+xml" />
	<link>https://stackoverflow.max-everyday.com</link>
	<description>我要當一個豬頭，快樂過每一天</description>
	<lastBuildDate>Mon, 13 May 2019 16:10:39 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://stackoverflow.max-everyday.com/wp-content/uploads/2017/02/max-stackoverflow-256.png</url>
	<title>password &#8211; Max的程式語言筆記</title>
	<link>https://stackoverflow.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How To Use SSH Keys connect to Linux server</title>
		<link>https://stackoverflow.max-everyday.com/2017/12/how-to-use-ssh-keys-to-linux-server/</link>
					<comments>https://stackoverflow.max-everyday.com/2017/12/how-to-use-ssh-keys-to-linux-server/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Thu, 07 Dec 2017 08:09:22 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[DigitalOcean]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[password]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=1686</guid>

					<description><![CDATA[如何透過 pub key 不用打密碼連進 lin...]]></description>
										<content:encoded><![CDATA[<p>如何透過 pub key 不用打密碼連進 linux server 裡，當然可以把密碼設的超級長，之後就透過 pub key 登入比較有效率。在 ssh client side 拿到的 key 在第1 次 ssh 時還是可以使用 id/password 方式去登入，再透過 vi ~/.ssh/authorized_keys 加入到 server side 即可。</p>
<p>&nbsp;</p>
<p><strong>Note</strong>: <em>This guide is for Mac OS X and Linux users. If you are using Windows on your home computer, follow <a href="https://www.digitalocean.com/community/articles/how-to-use-ssh-keys-with-putty-on-digitalocean-droplets-windows-users">this guide</a> instead.</em></p>
<hr />
<h4>Step One—Create the RSA Key Pair</h4>
<blockquote>
<pre>ssh-keygen -t rsa</pre>
</blockquote>
<hr />
<h4>Step Two—Store the Keys and Passphrase</h4>
<p>&nbsp;</p>
<p>Once you have entered the Gen Key command, you will get a few more questions:</p>
<pre>Enter file in which to save the key (/demo/.ssh/id_rsa):</pre>
<p>You can press enter here, saving the file to the user home (in this case, my example user is called demo).</p>
<pre>Enter passphrase (empty for no passphrase):</pre>
<p>It&#8217;s up to you whether you want to use a passphrase The entire key generation process looks like this:</p>
<pre>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/demo/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /demo/.ssh/id_rsa.
Your public key has been saved in /demo/.ssh/id_rsa.pub.
The key fingerprint is:
4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a
The key's randomart image is:
+--[ RSA 2048]----+
|          .oo.   |
|         .  o.E  |
|        + .  o   |
|     . = = .     |
|      = S = .    |
|     o + = +     |
|      . o + o .  |
|           . o   |
|                 |
+-----------------+</pre>
<p>The public key is now located in /demo/.ssh/id_rsa.pub The private key (identification) is now located in /demo/.ssh/id_rsa</p>
<hr />
<h4>Step Three—Copy the SSH Keys</h4>
<p>透過  cat ~/.ssh/id_rsa.pub 就可以拿到公開的 key</p>
<p>再把內容都加入(append)到要被 ssh 連進去的 server 的 ~/.ssh/authorized_keys 檔案裡，就可以讓其他台電腦不用打密碼連進 ssh server 了。</p>
<p>&nbsp;</p>
<h4>相關文章：</h4>
<p>保衛 OpenSSH</p>
<p>中文版：<a href="https://wiki.centos.org/zh-tw/HowTos/Network/SecuringSSH">https://wiki.centos.org/zh-tw/HowTos/Network/SecuringSSH</a></p>
<p>英文版：<a href="https://wiki.centos.org/HowTos/Network/SecuringSSH">https://wiki.centos.org/HowTos/Network/SecuringSSH</a></p>
<hr />
<p class="line874">OpenSSH（或者 Secure Shell）以經成為一個取代 telnet 協議作遠端存取用的現有標準。SSH 已經令 telnet 等協議多餘的，當中絕大部份原因是由於連線被加密，以及不再以純文字公開地傳送密碼。<span id="line-8" class="anchor"></span><span id="line-9" class="anchor"></span></p>
<p class="line874">然而，預設的 ssh 安裝並非完美。當你營運一個 ssh 伺服器時，有數個簡單的步驟可以明顯地加固你的安裝。<span id="line-10" class="anchor"></span><span id="line-11" class="anchor"></span></p>
<h2 id="head-198aee1737631c45022da8557a578b41290d3a24">1. 採用難猜測的密碼／用戶名稱</h2>
<p class="line874">如果你所營運的 ssh 是對外的，你首先會發現的事情，很可能就是駭客嘗試猜/測用戶名稱／密碼的記錄。駭客一般會掃描連接埠 22（ssh 預設聆聽的連接埠）來找尋執行 ssh 的機器，然後嘗試強行攻擊它。借著使用難猜測的密碼，我們希望任何攻擊在成功前會被記錄底及被留意到。<span id="line-13" class="anchor"></span><span id="line-14" class="anchor"></span></p>
<p class="line874">盼望你已經採用了難猜測的密碼。要不然，請嘗試選擁有以下特徵的密碼：<span id="line-15" class="anchor"></span><span id="line-16" class="anchor"></span></p>
<ul>
<li>最少有 8 個字元<span id="line-17" class="anchor"></span></li>
<li>同時有大寫和小寫字母<span id="line-18" class="anchor"></span></li>
<li>同時有字母和數目字<span id="line-19" class="anchor"></span></li>
<li>有非英數的字元（例如 ! &#8221; £ $ % ^ 等特別字元）<span id="line-20" class="anchor"></span></li>
</ul>
<p class="line874">使用難測密碼的好處並不止於 ssh，它更會影響到系統安全的各個範疇。有關密碼的更多資訊可以在 CentOS 的文檔內找到：<span id="line-21" class="anchor"></span><span id="line-22" class="anchor"></span></p>
<p class="line867"><a class="http" href="http://www.centos.org/docs/4/html/rhel-sg-en-4/s1-wstation-pass.html">http://www.centos.org/docs/4/html/rhel-sg-en-4/s1-wstation-pass.html</a><span id="line-23" class="anchor"></span><span id="line-24" class="anchor"></span></p>
<p class="line874">如果你完全沒法阻止你的用戶選用易猜測的密碼，請考慮以隨機產生或難猜測的字串作為用戶名稱。如果壞人不能猜測用戶名稱，他們便不能強加猜測密碼。然而，這只是隱晦資訊來換取安全，所以要留心用戶名稱透過用戶發送的電郵等途徑而被洩漏。<span id="line-25" class="anchor"></span><span id="line-26" class="anchor"></span></p>
<h2 id="head-875a293739a9d337484a2226bcbbbb4a8ee4c0b9">2. 停用 root 登入</h2>
<p class="line862">SSH 伺服器的設定都儲存在 <strong>/etc/ssh/sshd_confg</strong> 這個檔案。要停用 root 登入，請確定你有以下一行：<span id="line-28" class="anchor"></span></p>
<pre># 阻止 root 登入：
<span id="line-29" class="anchor"></span>PermitRootLogin no</pre>
<p class="line862">然後請重新啟動 sshd 服務：<span id="line-31" class="anchor"></span></p>
<pre>service sshd restart
<span id="line-32" class="anchor"></span></pre>
<p class="line862">你果你需要 root 的權限，請登入為一般用戶，然後使用 <strong>su</strong> 這個指令。<span id="line-34" class="anchor"></span><span id="line-35" class="anchor"></span></p>
<h2 id="head-5ced0101962be14377374e63070383323467929e">3. 限制用戶登入</h2>
<p class="line862">SSH 登入可以局限給某些需要遠端存取的用戶。如果你的系統有很多用戶，一個合理的做法就是局限遠端存取給那真正有需要的用戶，藉以減低其他用戶採用易測密碼的影響。在 <strong>/etc/ssh/sshd_config</strong> 內加入 AllowUsers 一行，以空格隔開用戶名稱。例如：<span id="line-37" class="anchor"></span></p>
<pre>AllowUsers alice bob</pre>
<p class="line874">接著請重新啟動 sshd 服務。<span id="line-39" class="anchor"></span><span id="line-40" class="anchor"></span></p>
<p>&nbsp;</p>
<h2 id="head-9998a215b709986d1be15eb92098ad3aa1f7ddb5">4. 停用第 1 類協議</h2>
<p class="line862">SSH 可以採用兩款協議：第 1 類及第 2 類協議。較舊的第 1 類協議的安全性較低，因此它應該被停用，除非你知道你必須要使用它。請在 <strong>/etc/ssh/sshd_config</strong> 檔內找尋以下一行，解除註釋，並作出如下修改：<span id="line-42" class="anchor"></span></p>
<pre># Protocol 2,1
<span id="line-43" class="anchor"></span>Protocol 2
<span id="line-44" class="anchor"></span></pre>
<p class="line874">然後請重新啟動 sshd 服務。<span id="line-46" class="anchor"></span><span id="line-47" class="anchor"></span></p>
<p>&nbsp;</p>
<h2 id="head-833ad44a400ce2cc2a11c4c1e20ec5ebf0a88e07">5. 採用非標準的連接埠</h2>
<p class="line862">根據預設值，ssh 在連接埠 22 聆聽進入的連線。一個駭客如果要斷定 ssh 是否在你的機器上運行，他最大可能就是掃描連接埠 22。一個有效混淆他的方法就是在非標準的連接埠上運行 ssh。任何未被使用的連接埠都可行，但首選的是 1024 以上的。很多人選用 2222 作為替代的連接埠（它很易記），正如 8080 經常被用作 HTTP 的替代連接埠。正正由於這個原因令它不是個好的選擇，因為任何掃描連接埠 22 的駭客亦不會放過連接埠 2222。隨機地選用一個未被使用的高位連接埠會比較合宜。要進行改動，請在你的 <strong>/etc/ssh/sshd_config</strong> 檔內加入以下一行：<span id="line-49" class="anchor"></span></p>
<pre># 在非標準的連接埠上執行 ssh：
<span id="line-50" class="anchor"></span>Port 2345  #修改我</pre>
<p class="line862">然後重新啟動 sshd 服務。請勿忘記在你的路由器及相關的防火牆規則裡作出任何必要的改動。譬如在 CentOS 7 你需要更改 firewalld：<span id="line-52" class="anchor"></span></p>
<pre>$ firewall-cmd --add-port 2345/tcp
<span id="line-53" class="anchor"></span>$ firewall-cmd --add-port 2345/tcp --permanent</pre>
<p class="line874">又或者在 CentOS 6：<span id="line-56" class="anchor"></span><span id="line-57" class="anchor"></span></p>
<pre>$ iptables -I INPUT -p tcp --dport 2345 -j ACCEPT</pre>
<p class="line862">在 CentOS 6 及以上版本，你亦需要更新 selinux，並正確地標籤所選用的連接埠，否則 sshd 便無法存取它。舉個例說：<span id="line-60" class="anchor"></span></p>
<pre>$ semanage port -a -t ssh_port_t -p tcp 2345 #請更改這處</pre>
<p class="line862">因為 ssh 不再在標準的連接埠上聆聽連線，你須要告訴客戶端要連線到哪個連接埠。在指令行上執行 ssh 客戶端時，你可以用 -p 選項來指定連接埠：<span id="line-63" class="anchor"></span></p>
<pre>$ ssh -p 2345 myserver</pre>
<p class="line862">又或者如果你使用 konqueror 的 fish 協議，你可用：<span id="line-65" class="anchor"></span></p>
<pre>fish://myserver:2345/remote/dir</pre>
<p class="line862">如果你覺得每次連線時都要指定連接埠似乎很痛苦，你只需在你個人的 <strong>~/.ssh/config</strong> 檔案裡加入一個指定連接埠的記錄：<span id="line-67" class="anchor"></span></p>
<pre> # 客戶端 ~/.ssh/config
<span id="line-68" class="anchor"></span>Host myserver
<span id="line-69" class="anchor"></span>HostName 72.232.194.162
<span id="line-70" class="anchor"></span>        User bob
<span id="line-71" class="anchor"></span>        Port 2345
<span id="line-72" class="anchor"></span></pre>
<p class="line867"><strong>~/.ssh/config</strong> 必須有以下存取權：<span id="line-74" class="anchor"></span></p>
<pre>$ chmod 600 ~/.ssh/config
<span id="line-75" class="anchor"></span></pre>
<h2 id="head-7754a22695febc79d8fdb94319e8811605828200">6. 在防火牆過濾 SSH</h2>
<p>linux 裡有很多防火牆可以用，像是 iptables , ufw 或 firewall-cmd. 直接使用：</p>
<blockquote>
<pre>sudo ufw allow 22</pre>
</blockquote>
<p>上面的指令可以直接開啟某一個 port number.</p>
<p class="line862">如果你只須由一個 IP 位址進行遠端存取（例如由辦工室進入家中的伺服器），請考慮在你的路由器或 iptables 內加入一條防火牆的規則，將連接埠 22 的存取權限制到特定的 IP 位址，藉此對連線進行過濾。舉個例說，在 iptables 內你可以用這類型的規則達至這個目的：<span id="line-79" class="anchor"></span></p>
<pre>iptables -A INPUT -p tcp -s 72.232.194.162 --dport 22 -j ACCEPT</pre>
<p class="line874">SSH 亦對 TCP 包裝函式有內置支援，因此 ssh 服務的存取權亦可同時用 host.allow 及 hosts.deny 來進行管制。<span id="line-81" class="anchor"></span><span id="line-82" class="anchor"></span></p>
<p class="line862">如果你無法限制來源地的 IP 位址，而必須公開 ssh 連接埠，那麼 iptables 依然可以透過記錄及攔截來自同一 IP 位址的重覆登入嘗試，幫助你阻止強行的攻擊。例如：<span id="line-83" class="anchor"></span></p>
<pre>iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name ssh --rsource
<span id="line-84" class="anchor"></span>iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent ! --rcheck --seconds 60 --hitcount 4 --name ssh --rsource -j ACCEPT
<span id="line-85" class="anchor"></span></pre>
<p class="line862">第一條規則利用 <tt class="backtick">recent</tt> 模塊來記錄每個存取連接埠 22 的新嘗試。第二條規則檢查這個 IP 位址在過去 60 秒內有否嘗試 4 次或以上的連線，若然沒有更接納封包。注意這個規則須要輸入鏈採用 DROP 的預設政策。<span id="line-87" class="anchor"></span><span id="line-88" class="anchor"></span></p>
<p class="line874">如果你在非標準的連接埠上執行 ssh，請不要忘記對連接埠作出相應修改。情況許可的話，利用防火牆進行過濾是一個非常有效的方法來保衛 ssh 伺服器。<span id="line-89" class="anchor"></span><span id="line-90" class="anchor"></span></p>
<p class="line874">採用 FirewallD 服務的系統，可執行下列 firewall-cmd：<span id="line-91" class="anchor"></span><span id="line-92" class="anchor"></span></p>
<pre>firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp --dport 22 -m state --state NEW -m recent --set
<span id="line-93" class="anchor"></span>firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT_direct 1 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 30 --hitcount 4 -j REJECT --reject-with tcp-reset
<span id="line-94" class="anchor"></span>firewall-cmd --reload</pre>
<h2 id="head-3fbabbfd4efed14d16340fc3dddfb78e23be2b6c">7. 採用公鑰／私鑰來驗證</h2>
<p class="line874">採用加密金鑰來驗證提供兩大好處。首先，如果你應用公鑰／私鑰，是方便，因為你不用再輸入密碼（除非你用密碼來保護你的金鑰）。第二，當伺服器能進行金鑰對的驗證，你便可以完全停用密碼驗證，意即存取時靠賴授權的金鑰 —— 因此不再有猜測密碼的嘗試。<span id="line-98" class="anchor"></span><span id="line-99" class="anchor"></span></p>
<p class="line874">建立及在你的 ssh 伺服器上安裝金鑰對是個相對地簡單的過程。<span id="line-100" class="anchor"></span><span id="line-101" class="anchor"></span></p>
<p class="line862">首先，在你會用來連線到伺服器的客戶端上建立一對金鑰（你須要在每台用來連線的機器上這樣做）：<span id="line-102" class="anchor"></span></p>
<pre>$ ssh-keygen -t rsa</pre>
<p class="line862">這樣做會在你的（隱藏了的）<strong>~/.ssh</strong> 目錄內建立兩個檔案，名叫：<strong>id_rsa</strong> 及 <strong>id_rsa.pub</strong>。第一個檔案：<strong>id_rsa</strong> 是你的私鑰，而另一個：<strong>id_rsa.pub</strong> 是你的公鑰。<span id="line-104" class="anchor"></span><span id="line-105" class="anchor"></span></p>
<p class="line862">如果你不想每次連線時都被問及密碼（它是用來解開特定的公鑰），在建立金鑰對的時候，你只須按 <strong>enter</strong> 作為密碼。建立金鑰對時，是否以密碼加密純粹是你的決定。如何你不將金鑰加密，任何人奪得你的本地機器後，便自動擁有遠端伺服器的 ssh 存取權。此外，本地機器上的 root 能夠存取你的金鑰：但假若你不能信任 root（或者 root 已被攻佔），你已經大禍臨頭。將金鑰加密捨棄了不用密碼的 ssh 伺服器，來換取額外的安全，得來的就是輸入密碼來使用這條金鑰。你可利用 <strong>ssh_agent</strong> 這個程式進一步簡化這個程序。<span id="line-106" class="anchor"></span><span id="line-107" class="anchor"></span></p>
<p class="line862">現在為你的私鑰設定權限：<span id="line-108" class="anchor"></span></p>
<pre>$ chmod 700 ~/.ssh
<span id="line-109" class="anchor"></span>$ chmod 600 ~/.ssh/id_rsa</pre>
<p class="line862">請將公鑰（id_rsa.pub）複製到伺服器上，然後安裝它在 authorized_keys 清單內：<span id="line-111" class="anchor"></span></p>
<pre>$ cat id_rsa.pub &gt;&gt; ~/.ssh/authorized_keys</pre>
<p class="line867"><strong>註：</strong>一旦你匯入了公鑰，你可以在伺服器上刪除它。<span id="line-113" class="anchor"></span><span id="line-114" class="anchor"></span></p>
<p class="line862">最後，設定伺服器上的檔案權限：<span id="line-115" class="anchor"></span></p>
<pre>$ chmod 700 ~/.ssh
<span id="line-116" class="anchor"></span>$ chmod 600 ~/.ssh/authorized_keys</pre>
<p class="line862">如果 <strong>/etc/ssh/sshd_config</strong> 內的 <tt class="backtick">StrictModes</tt> 被啟用（預設值），以上的權限是<strong>必須的</strong>。<span id="line-118" class="anchor"></span><span id="line-119" class="anchor"></span></p>
<p class="line862">請確保你已設置正確的 SELinux 脈絡：<span id="line-120" class="anchor"></span></p>
<pre>$ restorecon -Rv ~/.ssh</pre>
<p class="line874">現在當你登入伺服器的時候，你便不用再輸入密碼（除非你在建立金鑰對的時候輸入了一個密碼）。ssh 預設是會先利用金鑰進行驗證。如何它找不到金鑰，或驗證失敗，ssh 會回落到平常的密碼驗證。<span id="line-123" class="anchor"></span><span id="line-124" class="anchor"></span></p>
<p class="line862">一旦你檢查過可以用金鑰對來登入伺服器，你可以在你的 <strong>/etc/ssh/sshd_conf</strong> 檔內加入以下設定來停用密碼驗證：<span id="line-125" class="anchor"></span></p>
<pre># 停用密碼驗證，強制使用金鑰
<span id="line-126" class="anchor"></span>PasswordAuthentication no</pre>
<h2 id="head-37c37c55c8be39700143ef4559d2542a47119e22">8. 常見問題（FAQ）</h2>
<p class="line874">問：CentOS 採用 X 版的 OpenSSH，而最新版本是 Y 版。X 版藏有一個嚴重的安全性漏洞，我應否升級？<span id="line-129" class="anchor"></span><span id="line-130" class="anchor"></span></p>
<p class="line874">答：不應該。上游供應者有一個政策，會將最新版本的安全性修正反向移植到現有的發行版本內。只要你擁有最新的更新，你的 CentOS 發行版本已經得到全面修正。有關反向移植安全性修正的詳情，請參閱這裡：<span id="line-131" class="anchor"></span><span id="line-132" class="anchor"></span></p>
<p class="line867"><a class="http" href="http://www.redhat.com/advice/speaks_backport.html">http://www.redhat.com/advice/speaks_backport.html</a><span id="line-133" class="anchor"></span><span id="line-134" class="anchor"></span></p>
<p class="line874">問：我如何令 ssh 容讓以 NFS 共享用戶主目錄的機器採用無密碼的驗證？<span id="line-135" class="anchor"></span><span id="line-136" class="anchor"></span></p>
<p class="line874">答：SELinux 預設攔阻 root 存取以 NFS 共享、非公用的目錄及檔案，因此 ssh 無法讀取 ~/.ssh 內的用戶金鑰檔。若要批準存取權，請用以下指令更改 use_nfs_home_dirs 的設定值：<span id="line-137" class="anchor"></span><span id="line-138" class="anchor"></span></p>
<pre>setsebool -P use_nfs_home_dirs 1</pre>
<p class="line867"><a class="https" href="https://www.centos.org/forums/viewtopic.php?t=49194">https://www.centos.org/forums/viewtopic.php?t=49194</a><span id="line-141" class="anchor"></span><span id="line-142" class="anchor"></span></p>
<h2 id="head-e5b42453a3ff59155760b22629133fa5f8459d4d">9. 連結</h2>
<p class="line867"><a class="http" href="http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-openssh.html">http://www.centos.org/docs/5/html/Deployment_Guide-en-US/ch-openssh.html</a><span id="line-144" class="anchor"></span><span id="line-145" class="anchor"></span></p>
<p class="line867"><a class="http" href="http://www.dragonresearchgroup.org/insight/sshpwauth-tac.html">http://www.dragonresearchgroup.org/insight/sshpwauth-tac.html</a></p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2017/12/how-to-use-ssh-keys-to-linux-server/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java三行代码搞定MD5加密</title>
		<link>https://stackoverflow.max-everyday.com/2017/08/get-md5-hash-in-a-few-lines-of-java/</link>
					<comments>https://stackoverflow.max-everyday.com/2017/08/get-md5-hash-in-a-few-lines-of-java/#comments</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Thu, 17 Aug 2017 04:03:53 +0000</pubDate>
				<category><![CDATA[Dropboxlike開發筆記]]></category>
		<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[password]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=1108</guid>

					<description><![CDATA[Get MD5 Hash In A Few Li...]]></description>
										<content:encoded><![CDATA[<p>Get MD5 Hash In A Few Lines Of Java</p>
<pre> /**
 * 對字符串md5加密
 *
 * @param str
 * @return
 */
 public String getMD5(String str) {
 String ret = null;
 try {
 // 生成一個MD5加密計算摘要
 MessageDigest md = MessageDigest.getInstance("MD5");
 // 計算md5函數
 md.update(str.getBytes());
 // digest()最後確定返回md5 hash值，返回值為8為字符串。因為md5 hash值是16位的hex值，實際上就是8位的字符
 // BigInteger函數則將8位的字符串轉換成16位hex值，用字符串來表示；得到字符串形式的hash值
 ret = new BigInteger(1, md.digest()).toString(16);
 } catch (Exception e) {
 //throw new SpeedException("MD5加密出現錯誤");
 e.printStackTrace();
 }
 return ret;
 }</pre>
<p> </p>


<hr class="wp-block-separator"/>



<p>java.math.BigInteger.toString(int radix)方法實例</p>



<p><strong>java.math.BigInteger.toString(int radix) </strong>返回此BigInteger在給定的基數的字符串表示形式。如果基數是從Character.MIN_RADIX到Character.MAX_RADIX包容的範圍內，它會默認為10(因為Integer.toString的情況下)。</p>



<p><strong>聲明</strong></p>



<p>以下是java.math.BigInteger.toString()方法的聲明</p>



<p>public String toString(int radix)</p>



<p><strong>參數</strong></p>



<p>radix &#8211; 該字符串表示形式的基數</p>



<p><strong>返回值</strong></p>



<p>此方法返回此BigInteger在給定的基數的字符串表示形式。</p>



<hr class="wp-block-separator"/>



<p>BigInteger(byte[] val)<br>BigInteger的大小为val的顺序拼接结果</p>



<pre class="wp-block-preformatted">byte[] val = new byte[]{0x11,0x22,0x33};<br>BigInteger bigInteger = new BigInteger(val);<br>System.out.println(bigInteger.toString(16)); //16进制输出 , 结果 : 112233</pre>



<hr class="wp-block-separator"/>



<p>BigInteger(String val, int radix)<br>得到大小为val , 以 radix 为基数的 BigInteger</p>



<pre class="wp-block-preformatted">BigInteger bigInteger = new BigInteger("1F", 16);<br>System.out.println(bigInteger.toString(16));//输出结果 1f<br>System.out.println(bigInteger.toString(10));//输出结果 31</pre>



<hr class="wp-block-separator"/>



<pre class="wp-block-preformatted">String s1 = "126656864e144ad88d7ff96badd2f68b"; // 16进制数
BigInteger b = new BigInteger(s1,16);           // 16进制转成大数类型    
String s2 = b.toString(16);                     // 大数类型转成16进制</pre>



<p>上列的範例輸入結果：</p>



<pre class="wp-block-preformatted">s1: 126656864e144ad88d7ff96badd2f68b<br>s2: 126656864e144ad88d7ff96badd2f68b</pre>



<p>如果前2碼修改為00，則：</p>



<pre class="wp-block-preformatted">s1: 006656864e144ad88d7ff96badd2f68b<br>s2: 6656864e144ad88d7ff96badd2f68b</pre>



<p>所以，最上面的例子，前面要補滿0 才不會出錯。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2017/08/get-md5-hash-in-a-few-lines-of-java/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>mysql ERROR 1045 (28000): Access denied for user &#8216;root&#8217;@&#8217;localhost&#8217; (using password: NO)</title>
		<link>https://stackoverflow.max-everyday.com/2017/07/mysql-error-1045-28000-access-denied-for-user-rootlocalhost-using-password-no/</link>
					<comments>https://stackoverflow.max-everyday.com/2017/07/mysql-error-1045-28000-access-denied-for-user-rootlocalhost-using-password-no/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 26 Jul 2017 02:12:27 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[password]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=995</guid>

					<description><![CDATA[在Mac OS X 上安裝了 MySQL，可是r...]]></description>
										<content:encoded><![CDATA[<p>在Mac OS X 上安裝了 MySQL，可是root帳號預設無法用沒有密碼登入。</p>
<p>一開始是在 mysql 上下載安裝檔，可是「官方」的版本似乎很大牌或是不太貼心，都沒有幫忙設定執行檔到path變數裡，所下mysql 相關指令無法執行，還是非官方的版本貼心一點。</p>
<p>非官方的安裝方法，先裝homebrew:</p>
<pre><code id="selectable">/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"</code></pre>
<div class="col-1">在終端機命令列提示貼上這個，就可以多一個 brew 指令可以使用。</div>
<hr />
<p>接著，用 brew install Mysql Client：</p>
<pre><code>brew install mysql --client-only --universal</code></pre>
<p>醬子就可以只安裝到 client, 不下參數就可以連 server side 一起安裝。</p>
<hr />
<p>Stop MySQL Server (on Linux):</p>
<pre>/etc/init.d/mysql stop</pre>
<p>Stop MySQL Server (on Mac OS X):</p>
<pre>mysql.server stop</pre>
<hr />
<p>接著，要手動啟動一下 mysql:</p>
<pre><code>mysqld_safe --skip-grant-tables &amp;</code></pre>
<pre><code>mysql -u root</code></pre>
<p>&nbsp;</p>
<p>進入mysql 後，</p>
<pre><code>use mysql;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new-password');
FLUSH PRIVILEGES;
quit;
</code></pre>
<p>&nbsp;</p>
<p>Stop MySQL Server:</p>
<pre class="lang-sql prettyprint prettyprinted"><code><span class="pln">mysql stop</span></code></pre>
<p>Start MySQL server and test it:</p>
<pre class="lang-sql prettyprint prettyprinted"><code><span class="pln">mysql </span><span class="pun">-</span><span class="pln">u root </span><span class="pun">-</span><span class="pln">p
</span></code></pre>
<hr />
<p>&nbsp;</p>
<p>開新 DB  &amp; 建新帳號：</p>
<pre>Create database newdb;

CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'user-password-here';

GRANT ALL PRIVILEGES ON newdb.* TO dbuser@localhost;

FLUSH PRIVILEGES;</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h4>相關文章：</h4>
<p>mysql Access denied for user &#8216;dbaccount&#8217;@&#8217;%&#8217; to database<br />
<a href="https://stackoverflow.max-everyday.com/2017/09/mysql-access-denied-for-user-dbaccount-to-database/">https://stackoverflow.max-everyday.com/2017/09/mysql-access-denied-for-user-dbaccount-to-database/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2017/07/mysql-error-1045-28000-access-denied-for-user-rootlocalhost-using-password-no/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Encrypt and Decrypt by AES algorithm in both python and android</title>
		<link>https://stackoverflow.max-everyday.com/2016/12/encrypt-and-decrypt-by-aes-algorithm-in-both-python-and-android/</link>
					<comments>https://stackoverflow.max-everyday.com/2016/12/encrypt-and-decrypt-by-aes-algorithm-in-both-python-and-android/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Sat, 17 Dec 2016 17:00:11 +0000</pubDate>
				<category><![CDATA[Android筆記]]></category>
		<category><![CDATA[Python筆記]]></category>
		<category><![CDATA[AES]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=73</guid>

					<description><![CDATA[我想在 python 把敏感的資料先加密，傳給A...]]></description>
										<content:encoded><![CDATA[<p>我想在 python 把敏感的資料先加密，傳給Android 後在Android裡解密，在stackoverflow 上面找到這一個範例，滿神奇的，程式碼貼進 python 和 android 就可以跑了，而且可以互相加／解密沒問題。</p>
<p>stackoverflow：<br />
<a href="http://stackoverflow.com/questions/29013414/encrypt-and-decrypt-by-aes-algorithm-in-both-python-and-android">http://stackoverflow.com/questions/29013414/encrypt-and-decrypt-by-aes-algorithm-in-both-python-and-android</a></p>
<hr />
<p>我的執行畫面：</p>
<p><a href="http://max-everyday.com/wp-content/uploads/2016/12/Screenshot-2016-12-18-15.31.06.jpg"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-2061" src="http://max-everyday.com/wp-content/uploads/2016/12/Screenshot-2016-12-18-15.31.06.jpg" alt="" width="1198" height="414" /></a></p>
<p>上面 terminal 是 python 的執行結果，下面白色是Android Studio 執行結果，使用同一把的key，python 產生出來的base64 碼是：</p>
<blockquote><p>hPbYdXXJ472jW2VsEOZLa5iBosENVulYO1xDPI23SsjvebY341uFOS5ZV</p></blockquote>
<p>Android 產生的base64碼是：</p>
<blockquote><p>oBOM8SX0a2YcLK2oltF1J/x+WqMP6sDj4Cbp0fPDlroepybDE1CuVsidjyIqNaeq</p></blockquote>
<p>雖然2邊加密完成後的所產生的base64碼長的不一樣，但是把 Android 產生出來的base64碼放到python裡去解，可以解出一樣的資料出來。</p>
<p>再更進階一點點的做法是加入Spongy Castle或Bouncy Castle：<br />
<a href="http://stackoverflow.com/questions/6898801/how-to-include-the-spongy-castle-jar-in-android">http://stackoverflow.com/questions/6898801/how-to-include-the-spongy-castle-jar-in-android</a></p>
<p>* Unfortunately, Android SDK doesn`t support PBKDF2WithHmacSHA256, so we use Spongy Castle, which is the stock Bouncy Castle libraries with a couple of small changes to make it work on Android.<br />
* For version 1.47 or higher of SpongyCastle, we can invoke PBKDF2WithHmacSHA256 directly,<br />
* but for versions below 1.47, we could not specify SHA256 digest and it defaulted to SHA1.<br />
* see<br />
* 1. <a href="https://rtyley.github.io/spongycastle/">https://rtyley.github.io/spongycastle/</a><br />
* 2. <a href="http://stackoverflow.com/a/15303291/3962551">http://stackoverflow.com/a/15303291/3962551</a><br />
* 3. <a href="https://en.wikipedia.org/wiki/Bouncy_Castle_(cryptography)">https://en.wikipedia.org/wiki/Bouncy_Castle_(cryptography)</a></p>
<h4>Bouncy Castle</h4>
<p>充氣城堡軍團（Legion of the Bouncy Castle）是一個來自澳大利亞的慈善團體，他們編寫了Bouncy Castle這個廣泛使用的類庫。該庫既提供了一個輕量級的密碼學 API，也是一個 Java 密碼擴展（JCE）的提供者。安卓平台已經內置了一個精簡過的老版本 Bouncy Castle（同時為了適配安卓平台也做了一些細小的改動）。</p>
<h4>Spongy Castle</h4>
<p>Spongy Castle 背後的動機是允許安卓開發者在應用程式中使用任意版本的 BouncyCastle 類庫。SpongyCastle 就是對最新版本的 BouncyCastle 進行了簡單地重新打包。</p>
<hr />
<p>Python code :</p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="kwd">import</span><span class="pln"> base64
</span><span class="kwd">import</span><span class="pln"> hashlib
</span><span class="kwd">from</span> <span class="typ">Crypto</span> <span class="kwd">import</span> <span class="typ">Random</span>
<span class="kwd">from</span> <span class="typ">Crypto</span><span class="pun">.</span><span class="typ">Cipher</span> <span class="kwd">import</span><span class="pln"> AES

</span><span class="kwd">class</span> <span class="typ">AESCipher</span><span class="pun">:</span>
    <span class="kwd">def</span><span class="pln"> __init__</span><span class="pun">(</span><span class="pln">self</span><span class="pun">,</span><span class="pln"> key</span><span class="pun">):</span><span class="pln">
        self</span><span class="pun">.</span><span class="pln">bs </span><span class="pun">=</span> <span class="lit">16</span><span class="pln">
        self</span><span class="pun">.</span><span class="pln">key </span><span class="pun">=</span><span class="pln"> hashlib</span><span class="pun">.</span><span class="pln">sha256</span><span class="pun">(</span><span class="pln">key</span><span class="pun">.</span><span class="pln">encode</span><span class="pun">()).</span><span class="pln">digest</span><span class="pun">()</span>

    <span class="kwd">def</span><span class="pln"> encrypt</span><span class="pun">(</span><span class="pln">self</span><span class="pun">,</span><span class="pln"> message</span><span class="pun">):</span><span class="pln">
        message </span><span class="pun">=</span><span class="pln"> self</span><span class="pun">.</span><span class="pln">_pad</span><span class="pun">(</span><span class="pln">message</span><span class="pun">)</span><span class="pln">
        iv </span><span class="pun">=</span> <span class="typ">Random</span><span class="pun">.</span><span class="pln">new</span><span class="pun">().</span><span class="pln">read</span><span class="pun">(</span><span class="pln">AES</span><span class="pun">.</span><span class="pln">block_size</span><span class="pun">)</span><span class="pln">
        cipher </span><span class="pun">=</span><span class="pln"> AES</span><span class="pun">.</span><span class="pln">new</span><span class="pun">(</span><span class="pln">self</span><span class="pun">.</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> AES</span><span class="pun">.</span><span class="pln">MODE_CBC</span><span class="pun">,</span><span class="pln"> iv</span><span class="pun">)</span>
        <span class="kwd">return</span><span class="pln"> base64</span><span class="pun">.</span><span class="pln">b64encode</span><span class="pun">(</span><span class="pln">iv </span><span class="pun">+</span><span class="pln"> cipher</span><span class="pun">.</span><span class="pln">encrypt</span><span class="pun">(</span><span class="pln">message</span><span class="pun">)).</span><span class="pln">decode</span><span class="pun">(</span><span class="str">'utf-8'</span><span class="pun">)</span>

    <span class="kwd">def</span><span class="pln"> decrypt</span><span class="pun">(</span><span class="pln">self</span><span class="pun">,</span><span class="pln"> enc</span><span class="pun">):</span><span class="pln">
        enc </span><span class="pun">=</span><span class="pln"> base64</span><span class="pun">.</span><span class="pln">b64decode</span><span class="pun">(</span><span class="pln">enc</span><span class="pun">)</span><span class="pln">
        iv </span><span class="pun">=</span><span class="pln"> enc</span><span class="pun">[:</span><span class="pln">AES</span><span class="pun">.</span><span class="pln">block_size</span><span class="pun">]</span><span class="pln">
        cipher </span><span class="pun">=</span><span class="pln"> AES</span><span class="pun">.</span><span class="pln">new</span><span class="pun">(</span><span class="pln">self</span><span class="pun">.</span><span class="pln">key</span><span class="pun">,</span><span class="pln"> AES</span><span class="pun">.</span><span class="pln">MODE_CBC</span><span class="pun">,</span><span class="pln"> iv</span><span class="pun">)</span>
        <span class="kwd">return</span><span class="pln"> self</span><span class="pun">.</span><span class="pln">_unpad</span><span class="pun">(</span><span class="pln">cipher</span><span class="pun">.</span><span class="pln">decrypt</span><span class="pun">(</span><span class="pln">enc</span><span class="pun">[</span><span class="pln">AES</span><span class="pun">.</span><span class="pln">block_size</span><span class="pun">:])).</span><span class="pln">decode</span><span class="pun">(</span><span class="str">'utf-8'</span><span class="pun">)</span>

    <span class="kwd">def</span><span class="pln"> _pad</span><span class="pun">(</span><span class="pln">self</span><span class="pun">,</span><span class="pln"> s</span><span class="pun">):</span>
        <span class="kwd">return</span><span class="pln"> s </span><span class="pun">+</span> <span class="pun">(</span><span class="pln">self</span><span class="pun">.</span><span class="pln">bs </span><span class="pun">-</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span> <span class="pun">%</span><span class="pln"> self</span><span class="pun">.</span><span class="pln">bs</span><span class="pun">)</span> <span class="pun">*</span><span class="pln"> chr</span><span class="pun">(</span><span class="pln">self</span><span class="pun">.</span><span class="pln">bs </span><span class="pun">-</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)</span> <span class="pun">%</span><span class="pln"> self</span><span class="pun">.</span><span class="pln">bs</span><span class="pun">)</span>

    <span class="lit">@staticmethod</span>
    <span class="kwd">def</span><span class="pln"> _unpad</span><span class="pun">(</span><span class="pln">s</span><span class="pun">):</span>
        <span class="kwd">return</span><span class="pln"> s</span><span class="pun">[:-</span><span class="pln">ord</span><span class="pun">(</span><span class="pln">s</span><span class="pun">[</span><span class="pln">len</span><span class="pun">(</span><span class="pln">s</span><span class="pun">)-</span><span class="lit">1</span><span class="pun">:])]</span></code></pre>
<hr />
<p>Android Code:</p>
<pre class="lang-java prettyprint prettyprinted"><code><span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">io</span><span class="pun">.</span><span class="typ">IOException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="typ">InvalidAlgorithmParameterException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="typ">InvalidKeyException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="typ">MessageDigest</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="typ">NoSuchAlgorithmException</span><span class="pun">;</span>

<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="typ">BadPaddingException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="typ">Cipher</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="typ">IllegalBlockSizeException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="typ">NoSuchPaddingException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="typ">SecretKey</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="typ">SecretKeyFactory</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="pln">spec</span><span class="pun">.</span><span class="typ">IvParameterSpec</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="pln">spec</span><span class="pun">.</span><span class="typ">PBEKeySpec</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> javax</span><span class="pun">.</span><span class="pln">crypto</span><span class="pun">.</span><span class="pln">spec</span><span class="pun">.</span><span class="typ">SecretKeySpec</span><span class="pun">;</span>

<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="typ">SecureRandom</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="pln">spec</span><span class="pun">.</span><span class="typ">AlgorithmParameterSpec</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="pln">spec</span><span class="pun">.</span><span class="typ">InvalidKeySpecException</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">security</span><span class="pun">.</span><span class="pln">spec</span><span class="pun">.</span><span class="typ">KeySpec</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> java</span><span class="pun">.</span><span class="pln">util</span><span class="pun">.</span><span class="typ">Arrays</span><span class="pun">;</span>

<span class="kwd">import</span><span class="pln"> android</span><span class="pun">.</span><span class="pln">annotation</span><span class="pun">.</span><span class="typ">SuppressLint</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> android</span><span class="pun">.</span><span class="pln">location</span><span class="pun">.</span><span class="typ">Criteria</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> android</span><span class="pun">.</span><span class="pln">util</span><span class="pun">.</span><span class="typ">Base64</span><span class="pun">;</span>
<span class="kwd">import</span><span class="pln"> android</span><span class="pun">.</span><span class="pln">util</span><span class="pun">.</span><span class="typ">Log</span><span class="pun">;</span>

<span class="lit">@SuppressLint</span><span class="pun">(</span><span class="str">"NewApi"</span><span class="pun">)</span>
<span class="kwd">public</span> <span class="kwd">class</span> <span class="typ">Crypt</span> <span class="pun">{</span>

<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">final</span> <span class="typ">String</span><span class="pln"> tag </span><span class="pun">=</span> <span class="typ">Crypt</span><span class="pun">.</span><span class="kwd">class</span><span class="pun">.</span><span class="pln">getSimpleName</span><span class="pun">();</span>

<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">final</span> <span class="typ">String</span><span class="pln"> characterEncoding </span><span class="pun">=</span> <span class="str">"UTF-8"</span><span class="pun">;</span>
<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">final</span> <span class="typ">String</span><span class="pln"> cipherTransformation </span><span class="pun">=</span> <span class="str">"AES/CBC/PKCS5Padding"</span><span class="pun">;</span>
<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">final</span> <span class="typ">String</span><span class="pln"> aesEncryptionAlgorithm </span><span class="pun">=</span> <span class="str">"AES"</span><span class="pun">;</span>
<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">final</span> <span class="typ">String</span><span class="pln"> key </span><span class="pun">=</span> <span class="str">"this is my key"</span><span class="pun">;</span>
<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> ivBytes </span><span class="pun">=</span> <span class="pun">{</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span><span class="pun">,</span> <span class="lit">0x00</span> <span class="pun">};</span>
<span class="kwd">private</span> <span class="kwd">static</span> <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> keyBytes</span><span class="pun">;</span>

<span class="kwd">private</span> <span class="kwd">static</span> <span class="typ">Crypt</span><span class="pln"> instance </span><span class="pun">=</span> <span class="kwd">null</span><span class="pun">;</span>

<span class="typ">Crypt</span><span class="pun">()</span>
<span class="pun">{</span>
    <span class="typ">SecureRandom</span><span class="pln"> random </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">SecureRandom</span><span class="pun">();</span>
    <span class="typ">Crypt</span><span class="pun">.</span><span class="pln">ivBytes </span><span class="pun">=</span> <span class="kwd">new</span> <span class="kwd">byte</span><span class="pun">[</span><span class="lit">16</span><span class="pun">];</span><span class="pln">
    random</span><span class="pun">.</span><span class="pln">nextBytes</span><span class="pun">(</span><span class="typ">Crypt</span><span class="pun">.</span><span class="pln">ivBytes</span><span class="pun">);</span> 
<span class="pun">}</span>

<span class="kwd">public</span> <span class="kwd">static</span> <span class="typ">Crypt</span><span class="pln"> getInstance</span><span class="pun">()</span> <span class="pun">{</span>
    <span class="kwd">if</span><span class="pun">(</span><span class="pln">instance </span><span class="pun">==</span> <span class="kwd">null</span><span class="pun">){</span><span class="pln">
        instance </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">Crypt</span><span class="pun">();</span>
    <span class="pun">}</span>
    <span class="kwd">return</span><span class="pln"> instance</span><span class="pun">;</span>
<span class="pun">}</span>

<span class="kwd">public</span> <span class="typ">String</span><span class="pln"> encrypt_string</span><span class="pun">(</span><span class="kwd">final</span> <span class="typ">String</span><span class="pln"> plain</span><span class="pun">)</span> <span class="kwd">throws</span> <span class="typ">InvalidKeyException</span><span class="pun">,</span> <span class="typ">NoSuchAlgorithmException</span><span class="pun">,</span> <span class="typ">NoSuchPaddingException</span><span class="pun">,</span> <span class="typ">InvalidAlgorithmParameterException</span><span class="pun">,</span> <span class="typ">IllegalBlockSizeException</span><span class="pun">,</span> <span class="typ">BadPaddingException</span><span class="pun">,</span> <span class="typ">IOException</span>
<span class="pun">{</span>
    <span class="kwd">return</span> <span class="typ">Base64</span><span class="pun">.</span><span class="pln">encodeToString</span><span class="pun">(</span><span class="pln">encrypt</span><span class="pun">(</span><span class="pln">plain</span><span class="pun">.</span><span class="pln">getBytes</span><span class="pun">()),</span> <span class="typ">Base64</span><span class="pun">.</span><span class="pln">DEFAULT</span><span class="pun">);</span>
<span class="pun">}</span>

<span class="kwd">public</span> <span class="typ">String</span><span class="pln"> decrypt_string</span><span class="pun">(</span><span class="kwd">final</span> <span class="typ">String</span><span class="pln"> plain</span><span class="pun">)</span> <span class="kwd">throws</span> <span class="typ">InvalidKeyException</span><span class="pun">,</span> <span class="typ">NoSuchAlgorithmException</span><span class="pun">,</span> <span class="typ">NoSuchPaddingException</span><span class="pun">,</span> <span class="typ">InvalidAlgorithmParameterException</span><span class="pun">,</span> <span class="typ">IllegalBlockSizeException</span><span class="pun">,</span> <span class="typ">BadPaddingException</span><span class="pun">,</span> <span class="typ">ClassNotFoundException</span><span class="pun">,</span> <span class="typ">IOException</span>
<span class="pun">{</span>
    <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> encryptedBytes </span><span class="pun">=</span><span class="pln"> decrypt</span><span class="pun">(</span><span class="typ">Base64</span><span class="pun">.</span><span class="pln">decode</span><span class="pun">(</span><span class="pln">plain</span><span class="pun">,</span> <span class="lit">0</span><span class="pun">));</span>
    <span class="kwd">return</span> <span class="typ">Base64</span><span class="pun">.</span><span class="pln">encodeToString</span><span class="pun">(</span><span class="pln"> encryptedBytes</span><span class="pun">,</span> <span class="typ">Base64</span><span class="pun">.</span><span class="pln">DEFAULT</span><span class="pun">);</span>
<span class="pun">}</span>

<span class="kwd">public</span>   <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> encrypt</span><span class="pun">(</span>   <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> mes</span><span class="pun">)</span>
        <span class="kwd">throws</span> <span class="typ">NoSuchAlgorithmException</span><span class="pun">,</span>
        <span class="typ">NoSuchPaddingException</span><span class="pun">,</span>
        <span class="typ">InvalidKeyException</span><span class="pun">,</span>
        <span class="typ">InvalidAlgorithmParameterException</span><span class="pun">,</span>
        <span class="typ">IllegalBlockSizeException</span><span class="pun">,</span>
        <span class="typ">BadPaddingException</span><span class="pun">,</span> <span class="typ">IOException</span> <span class="pun">{</span><span class="pln">

    keyBytes </span><span class="pun">=</span><span class="pln"> key</span><span class="pun">.</span><span class="pln">getBytes</span><span class="pun">(</span><span class="str">"UTF-8"</span><span class="pun">);</span>
    <span class="typ">Log</span><span class="pun">.</span><span class="pln">d</span><span class="pun">(</span><span class="pln">tag</span><span class="pun">,</span><span class="str">"Long KEY: "</span><span class="pun">+</span><span class="pln">keyBytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>
    <span class="typ">MessageDigest</span><span class="pln"> md </span><span class="pun">=</span> <span class="typ">MessageDigest</span><span class="pun">.</span><span class="pln">getInstance</span><span class="pun">(</span><span class="str">"SHA-256"</span><span class="pun">);</span><span class="pln">
    md</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="pln">keyBytes</span><span class="pun">);</span><span class="pln">
    keyBytes </span><span class="pun">=</span><span class="pln"> md</span><span class="pun">.</span><span class="pln">digest</span><span class="pun">();</span>

    <span class="typ">Log</span><span class="pun">.</span><span class="pln">d</span><span class="pun">(</span><span class="pln">tag</span><span class="pun">,</span><span class="str">"Long KEY: "</span><span class="pun">+</span><span class="pln">keyBytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>

    <span class="typ">AlgorithmParameterSpec</span><span class="pln"> ivSpec </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">IvParameterSpec</span><span class="pun">(</span><span class="pln">ivBytes</span><span class="pun">);</span>
    <span class="typ">SecretKeySpec</span><span class="pln"> newKey </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">SecretKeySpec</span><span class="pun">(</span><span class="pln">keyBytes</span><span class="pun">,</span><span class="pln"> aesEncryptionAlgorithm</span><span class="pun">);</span>
    <span class="typ">Cipher</span><span class="pln"> cipher </span><span class="pun">=</span> <span class="kwd">null</span><span class="pun">;</span><span class="pln">
    cipher </span><span class="pun">=</span> <span class="typ">Cipher</span><span class="pun">.</span><span class="pln">getInstance</span><span class="pun">(</span><span class="pln">cipherTransformation</span><span class="pun">);</span>

    <span class="typ">SecureRandom</span><span class="pln"> random </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">SecureRandom</span><span class="pun">();</span>   
    <span class="typ">Crypt</span><span class="pun">.</span><span class="pln">ivBytes </span><span class="pun">=</span> <span class="kwd">new</span> <span class="kwd">byte</span><span class="pun">[</span><span class="lit">16</span><span class="pun">];</span><span class="pln">               
    random</span><span class="pun">.</span><span class="pln">nextBytes</span><span class="pun">(</span><span class="typ">Crypt</span><span class="pun">.</span><span class="pln">ivBytes</span><span class="pun">);</span><span class="pln">            

    cipher</span><span class="pun">.</span><span class="pln">init</span><span class="pun">(</span><span class="typ">Cipher</span><span class="pun">.</span><span class="pln">ENCRYPT_MODE</span><span class="pun">,</span><span class="pln"> newKey</span><span class="pun">,</span><span class="pln"> random</span><span class="pun">);</span>
<span class="com">//    cipher.init(Cipher.ENCRYPT_MODE, newKey, ivSpec);</span>
    <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> destination </span><span class="pun">=</span> <span class="kwd">new</span> <span class="kwd">byte</span><span class="pun">[</span><span class="pln">ivBytes</span><span class="pun">.</span><span class="pln">length </span><span class="pun">+</span><span class="pln"> mes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">];</span>
    <span class="typ">System</span><span class="pun">.</span><span class="pln">arraycopy</span><span class="pun">(</span><span class="pln">ivBytes</span><span class="pun">,</span> <span class="lit">0</span><span class="pun">,</span><span class="pln"> destination</span><span class="pun">,</span> <span class="lit">0</span><span class="pun">,</span><span class="pln"> ivBytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>
    <span class="typ">System</span><span class="pun">.</span><span class="pln">arraycopy</span><span class="pun">(</span><span class="pln">mes</span><span class="pun">,</span> <span class="lit">0</span><span class="pun">,</span><span class="pln"> destination</span><span class="pun">,</span><span class="pln"> ivBytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">,</span><span class="pln"> mes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>
    <span class="kwd">return</span><span class="pln">  cipher</span><span class="pun">.</span><span class="pln">doFinal</span><span class="pun">(</span><span class="pln">destination</span><span class="pun">);</span>
<span class="pun">}</span>

<span class="kwd">public</span>   <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> decrypt</span><span class="pun">(</span>   <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> bytes</span><span class="pun">)</span>
        <span class="kwd">throws</span> <span class="typ">NoSuchAlgorithmException</span><span class="pun">,</span>
        <span class="typ">NoSuchPaddingException</span><span class="pun">,</span>
        <span class="typ">InvalidKeyException</span><span class="pun">,</span>
        <span class="typ">InvalidAlgorithmParameterException</span><span class="pun">,</span>
        <span class="typ">IllegalBlockSizeException</span><span class="pun">,</span>
        <span class="typ">BadPaddingException</span><span class="pun">,</span> <span class="typ">IOException</span><span class="pun">,</span> <span class="typ">ClassNotFoundException</span> <span class="pun">{</span><span class="pln">
    keyBytes </span><span class="pun">=</span><span class="pln"> key</span><span class="pun">.</span><span class="pln">getBytes</span><span class="pun">(</span><span class="str">"UTF-8"</span><span class="pun">);</span>
    <span class="typ">Log</span><span class="pun">.</span><span class="pln">d</span><span class="pun">(</span><span class="pln">tag</span><span class="pun">,</span><span class="str">"Long KEY: "</span><span class="pun">+</span><span class="pln">keyBytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>
    <span class="typ">MessageDigest</span><span class="pln"> md </span><span class="pun">=</span> <span class="typ">MessageDigest</span><span class="pun">.</span><span class="pln">getInstance</span><span class="pun">(</span><span class="str">"SHA-256"</span><span class="pun">);</span><span class="pln">
    md</span><span class="pun">.</span><span class="pln">update</span><span class="pun">(</span><span class="pln">keyBytes</span><span class="pun">);</span><span class="pln">
    keyBytes </span><span class="pun">=</span><span class="pln"> md</span><span class="pun">.</span><span class="pln">digest</span><span class="pun">();</span>
    <span class="typ">Log</span><span class="pun">.</span><span class="pln">d</span><span class="pun">(</span><span class="pln">tag</span><span class="pun">,</span><span class="str">"Long KEY: "</span><span class="pun">+</span><span class="pln">keyBytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>
    <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> ivB </span><span class="pun">=</span> <span class="typ">Arrays</span><span class="pun">.</span><span class="pln">copyOfRange</span><span class="pun">(</span><span class="pln">bytes</span><span class="pun">,</span><span class="lit">0</span><span class="pun">,</span><span class="lit">16</span><span class="pun">);</span>
    <span class="typ">Log</span><span class="pun">.</span><span class="pln">d</span><span class="pun">(</span><span class="pln">tag</span><span class="pun">,</span> <span class="str">"IV: "</span><span class="pun">+</span><span class="kwd">new</span> <span class="typ">String</span><span class="pun">(</span><span class="pln">ivB</span><span class="pun">));</span>
    <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> codB </span><span class="pun">=</span> <span class="typ">Arrays</span><span class="pun">.</span><span class="pln">copyOfRange</span><span class="pun">(</span><span class="pln">bytes</span><span class="pun">,</span><span class="lit">16</span><span class="pun">,</span><span class="pln">bytes</span><span class="pun">.</span><span class="pln">length</span><span class="pun">);</span>
    <span class="typ">AlgorithmParameterSpec</span><span class="pln"> ivSpec </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">IvParameterSpec</span><span class="pun">(</span><span class="pln">ivB</span><span class="pun">);</span>
    <span class="typ">SecretKeySpec</span><span class="pln"> newKey </span><span class="pun">=</span> <span class="kwd">new</span> <span class="typ">SecretKeySpec</span><span class="pun">(</span><span class="pln">keyBytes</span><span class="pun">,</span><span class="pln"> aesEncryptionAlgorithm</span><span class="pun">);</span>
    <span class="typ">Cipher</span><span class="pln"> cipher </span><span class="pun">=</span> <span class="typ">Cipher</span><span class="pun">.</span><span class="pln">getInstance</span><span class="pun">(</span><span class="pln">cipherTransformation</span><span class="pun">);</span><span class="pln">
    cipher</span><span class="pun">.</span><span class="pln">init</span><span class="pun">(</span><span class="typ">Cipher</span><span class="pun">.</span><span class="pln">DECRYPT_MODE</span><span class="pun">,</span><span class="pln"> newKey</span><span class="pun">,</span><span class="pln"> ivSpec</span><span class="pun">);</span>
    <span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> res </span><span class="pun">=</span><span class="pln"> cipher</span><span class="pun">.</span><span class="pln">doFinal</span><span class="pun">(</span><span class="pln">codB</span><span class="pun">);</span> 
    <span class="kwd">return</span><span class="pln">  res</span><span class="pun">;</span>
<span class="pun">}</span>
<span class="pun">}</span></code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2016/12/encrypt-and-decrypt-by-aes-algorithm-in-both-python-and-android/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>暴力密碼破解器 Hashcat</title>
		<link>https://stackoverflow.max-everyday.com/2016/09/hashcat/</link>
					<comments>https://stackoverflow.max-everyday.com/2016/09/hashcat/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 31 Aug 2016 17:22:03 +0000</pubDate>
				<category><![CDATA[Python筆記]]></category>
		<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=86</guid>

					<description><![CDATA[我本身不是學密碼相關的，如果有在開發的系統，請盡...]]></description>
										<content:encoded><![CDATA[<p>我本身不是學密碼相關的，如果有在開發的系統，請盡量避免在資料庫（Database）裡存密碼的明碼。</p>
<p>看了這幾篇相關文章，終於知道要怎麼在Hashcat裡使用多層 hash、加鹽（Salt）；密碼有中文字的部份，似乎有binary 的mode 可以選擇；密碼超過55個字的這情情況下，使用者自己可能就記不起來。</p>
<p>Hashcat 官網：<a href="http://hashcat.net/hashcat/">http://hashcat.net/hashcat/</a></p>
<h4>相關文章：</h4>
<p>The Dropbox hack is real<br />
<a href="https://www.troyhunt.com/the-dropbox-hack-is-real/">https://www.troyhunt.com/the-dropbox-hack-is-real/</a></p>
<p><a href="http://max-everyday.com/wp-content/uploads/2016/08/Cracked-password.png"><img decoding="async" class="alignnone size-full wp-image-1226" src="http://max-everyday.com/wp-content/uploads/2016/08/Cracked-password.png" alt="Cracked-password" width="657" height="240" /></a></p>
<p>你的密碼被偷了嗎？<br />
<a href="http://blog.darkthread.net/post-2016-08-31-have-i-been-pawned.aspx">http://blog.darkthread.net/post-2016-08-31-have-i-been-pawned.aspx</a></p>
<p>暴力密码破解器 ocl-Hashcat-plus 支持每秒猜测最多 80 亿个密码</p>
<p><a href="https://www.zhihu.com/question/21558046">https://www.zhihu.com/question/21558046</a></p>
<p>GPU破解神器Hashcat<br />
<a href="https://jiji262.github.io/wooyun_articles/drops/GPU%E7%A0%B4%E8%A7%A3%E7%A5%9E%E5%99%A8Hashcat%E4%BD%BF%E7%94%A8%E7%AE%80%E4%BB%8B.html">https://jiji262.github.io/wooyun_articles/drops/GPU%E7%A0%B4%E8%A7%A3%E7%A5%9E%E5%99%A8Hashcat%E4%BD%BF%E7%94%A8%E7%AE%80%E4%BB%8B.html</a></p>
<p>實戰 hashcat 破解 md5<br />
<a href="http://jazzlion.github.io/2016/06/16/%E5%AF%A6%E6%88%B0-hashcat-%E7%A0%B4%E8%A7%A3-md5/">http://jazzlion.github.io/2016/06/16/%E5%AF%A6%E6%88%B0-hashcat-%E7%A0%B4%E8%A7%A3-md5/</a></p>
<p>產生md5 的字串：<br />
<a href="http://www.md5.cz/">http://www.md5.cz/</a></p>
<p>Hash破解神器：Hashcat的简单使用<br />
<a href="http://xiao106347.blog.163.com/blog/static/215992078201451082547241/">http://xiao106347.blog.163.com/blog/static/215992078201451082547241/</a></p>
<p>OpenSSL 指令使用說明：<br />
<a href="https://www.madboa.com/geek/openssl/">https://www.madboa.com/geek/openssl/</a></p>
<p>Install hashcat on Mac OSX<br />
<a href="https://www.phillips321.co.uk/2016/07/09/hashcat-on-os-x-getting-it-going/">https://www.phillips321.co.uk/2016/07/09/hashcat-on-os-x-getting-it-going/</a></p>
<blockquote><p>git clone https://github.com/hashcat/hashcat.git<br />
mkdir -p hashcat/deps<br />
git clone https://github.com/KhronosGroup/OpenCL-Headers.git hashcat/deps/OpenCL<br />
cd hashcat/<br />
make</p></blockquote>
<hr />
<p>使用心得，大多情況下是會得到 exhausted [ɪgˋzɔstɪd] ，找不到結果，md5 8碼，要找2~5小時，滿可觀的，6碼以內的大多6秒內可以找到答案。善用字典加pattern真的很重要！</p>
<p>md5, sha1, sha256, sha512 加 salt 範例：<br />
<a href="https://hashcat.net/wiki/doku.php?id=example_hashes">https://hashcat.net/wiki/doku.php?id=example_hashes</a></p>
<p>多層 hash, 在 hashcat 裡是設定 round，ex：<br />
$5$rounds=5000</p>
<p>使用 hashcat 的 attach mode=3 (-a 3) 測 md5 為 1~6碼的，大約6秒內完成，使用 HMAC-SHA256 模式，只使用1個 round, 需要 2 mins, 22 secs來測試。</p>
<hr />
<p>Python hashlib 裡的說明：<br />
<a href="https://docs.python.org/2/library/hashlib.html">https://docs.python.org/2/library/hashlib.html</a></p>
<h2>14.1.1. Key derivation<a class="headerlink" title="Permalink to this headline" href="https://docs.python.org/2/library/hashlib.html#key-derivation">¶</a></h2>
<p>Key derivation and key stretching algorithms are designed for secure password hashing. Naive algorithms such as <code class="docutils literal"><span class="pre">sha1(password)</span></code> are not resistant against brute-force attacks. A good password hashing function must be tunable, slow, and include a <a class="reference external" href="https://en.wikipedia.org/wiki/Salt_%28cryptography%29">salt</a>.</p>
<dl class="function">
<dt id="hashlib.pbkdf2_hmac"><code class="descclassname">hashlib.</code><code class="descname">pbkdf2_hmac</code><span class="sig-paren">(</span><em>name</em>, <em>password</em>, <em>salt</em>, <em>rounds</em>, <em>dklen=None</em><span class="sig-paren">)</span></dt>
<dd>The function provides PKCS#5 password-based key derivation function 2. It uses HMAC as pseudorandom function.</p>
<p>The string <em>name</em> is the desired name of the hash digest algorithm for HMAC, e.g. ‘sha1’ or ‘sha256’. <em>password</em> and <em>salt</em> are interpreted as buffers of bytes. Applications and libraries should limit <em>password</em> to a sensible value (e.g. 1024). <em>salt</em> should be about 16 or more bytes from a proper source, e.g. <a class="reference internal" title="os.urandom" href="https://docs.python.org/2/library/os.html#os.urandom"><code class="xref py py-func docutils literal"><span class="pre">os.urandom()</span></code></a>.</p>
<p>The number of <em>rounds</em> should be chosen based on the hash algorithm and computing power. As of 2013, at least 100,000 rounds of SHA-256 is suggested.</p>
<p><em>dklen</em> is the length of the derived key. If <em>dklen</em> is <code class="docutils literal"><span class="pre">None</span></code> then the digest size of the hash algorithm <em>name</em> is used, e.g. 64 for SHA-512.</p>
<div class="highlight-python">
<div class="highlight">
<p><span class="copybutton" title="Hide the prompts and output">&gt;&gt;&gt;</span></p>
<pre><span class="gp">&gt;&gt;&gt; </span><span class="kn">import</span> <span class="nn">hashlib</span><span class="o">,</span> <span class="nn">binascii</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">dk</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">pbkdf2_hmac</span><span class="p">(</span><span class="s1">'sha256'</span><span class="p">,</span> <span class="n">b</span><span class="s1">'password'</span><span class="p">,</span> <span class="n">b</span><span class="s1">'salt'</span><span class="p">,</span> <span class="mi">100000</span><span class="p">)</span>
<span class="gp">&gt;&gt;&gt; </span><span class="n">binascii</span><span class="o">.</span><span class="n">hexlify</span><span class="p">(</span><span class="n">dk</span><span class="p">)</span>
<span class="go">b'0394a2ede332c9a13eb82e9b24631604c31df978b4e2f0fbd2c549944f9d79a5'</span>
</pre>
</div>
</div>
<div class="versionadded">
<p><span class="versionmodified">New in version 2.7.8.</span></p>
</div>
</dd>
</dl>
<hr />
<p>Mac OSX 上的 hashcat 使用說明：</p>
<pre><span style="color: #808080;">hashcat, advanced password recovery</span>

<span style="color: #808080;">Usage: hashcat [options]... hash|hashfile|hccapfile [dictionary|mask|directory]...</span>

<span style="color: #808080;">- [ Options ] -</span>

<span style="color: #808080;">Options Short / Long | Type | Description | Example</span>
<span style="color: #808080;">===============================+======+======================================================+=======================</span>
<span style="color: #808080;"> -m, --hash-type | Num | Hash-type, see references below | -m 1000</span>
<span style="color: #808080;"> -a, --attack-mode | Num | Attack-mode, see references below | -a 3</span>
<span style="color: #808080;"> -V, --version | | Print version |</span>
<span style="color: #808080;"> -h, --help | | Print help |</span>
<span style="color: #808080;"> --quiet | | Suppress output |</span>
<span style="color: #808080;"> --hex-charset | | Assume charset is given in hex |</span>
<span style="color: #808080;"> --hex-salt | | Assume salt is given in hex |</span>
<span style="color: #808080;"> --hex-wordlist | | Assume words in wordlist is given in hex |</span>
<span style="color: #808080;"> --force | | Ignore warnings |</span>
<span style="color: #808080;"> --status | | Enable automatic update of the status-screen |</span>
<span style="color: #808080;"> --status-timer | Num | Sets seconds between status-screen update to X | --status-timer=1</span>
<span style="color: #808080;"> --machine-readable | | Display the status view in a machine readable format |</span>
<span style="color: #808080;"> --loopback | | Add new plains to induct directory |</span>
<span style="color: #808080;"> --weak-hash-threshold | Num | Threshold X when to stop checking for weak hashes | --weak=0</span>
<span style="color: #808080;"> --markov-hcstat | File | Specify hcstat file to use | --markov-hc=my.hcstat</span>
<span style="color: #808080;"> --markov-disable | | Disables markov-chains, emulates classic brute-force |</span>
<span style="color: #808080;"> --markov-classic | | Enables classic markov-chains, no per-position |</span>
<span style="color: #808080;"> -t, --markov-threshold | Num | Threshold X when to stop accepting new markov-chains | -t 50</span>
<span style="color: #808080;"> --runtime | Num | Abort session after X seconds of runtime | --runtime=10</span>
<span style="color: #808080;"> --session | Str | Define specific session name | --session=mysession</span>
<span style="color: #808080;"> --restore | | Restore session from --session |</span>
<span style="color: #808080;"> --restore-disable | | Do not write restore file |</span>
<span style="color: #808080;"> -o, --outfile | File | Define outfile for recovered hash | -o outfile.txt</span>
<span style="color: #808080;"> --outfile-format | Num | Define outfile-format X for recovered hash | --outfile-format=7</span>
<span style="color: #808080;"> --outfile-autohex-disable | | Disable the use of $HEX[] in output plains |</span>
<span style="color: #808080;"> --outfile-check-timer | Num | Sets seconds between outfile checks to X | --outfile-check=30</span>
<span style="color: #808080;"> -p, --separator | Char | Separator char for hashlists and outfile | -p :</span>
<span style="color: #808080;"> --stdout | | Do not crack a hash, instead print candidates only |</span>
<span style="color: #808080;"> --show | | Compare hashlist with potfile; Show cracked hashes |</span>
<span style="color: #808080;"> --left | | Compare hashlist with potfile; Show uncracked hashes |</span>
<span style="color: #808080;"> --username | | Enable ignoring of usernames in hashfile |</span>
<span style="color: #808080;"> --remove | | Enable remove of hash once it is cracked |</span>
<span style="color: #808080;"> --remove-timer | Num | Update input hash file each X seconds | --remove-timer=30</span>
<span style="color: #808080;"> --potfile-disable | | Do not write potfile |</span>
<span style="color: #808080;"> --potfile-path | Dir | Specific path to potfile | --potfile-path=my.pot</span>
<span style="color: #808080;"> --debug-mode | Num | Defines the debug mode (hybrid only by using rules) | --debug-mode=4</span>
<span style="color: #808080;"> --debug-file | File | Output file for debugging rules | --debug-file=good.log</span>
<span style="color: #808080;"> --induction-dir | Dir | Specify the induction directory to use for loopback | --induction=inducts</span>
<span style="color: #808080;"> --outfile-check-dir | Dir | Specify the outfile directory to monitor for plains | --outfile-check-dir=x</span>
<span style="color: #808080;"> --logfile-disable | | Disable the logfile |</span>
<span style="color: #808080;"> --truecrypt-keyfiles | File | Keyfiles used, separate with comma | --truecrypt-key=x.png</span>
<span style="color: #808080;"> --veracrypt-keyfiles | File | Keyfiles used, separate with comma | --veracrypt-key=x.txt</span>
<span style="color: #808080;"> --veracrypt-pim | Num | VeraCrypt personal iterations multiplier | --veracrypt-pim=1000</span>
<span style="color: #808080;"> -b, --benchmark | | Run benchmark |</span>
<span style="color: #808080;"> -c, --segment-size | Num | Sets size in MB to cache from the wordfile to X | -c 32</span>
<span style="color: #808080;"> --bitmap-min | Num | Sets minimum bits allowed for bitmaps to X | --bitmap-min=24</span>
<span style="color: #808080;"> --bitmap-max | Num | Sets maximum bits allowed for bitmaps to X | --bitmap-min=24</span>
<span style="color: #808080;"> --cpu-affinity | Str | Locks to CPU devices, separate with comma | --cpu-affinity=1,2,3</span>
<span style="color: #808080;"> --opencl-platforms | Str | OpenCL platforms to use, separate with comma | --opencl-platforms=2</span>
<span style="color: #808080;"> -d, --opencl-devices | Str | OpenCL devices to use, separate with comma | -d 1</span>
<span style="color: #808080;"> -D, --opencl-device-types | Str | OpenCL device-types to use, separate with comma | -D 1</span>
<span style="color: #808080;"> --opencl-vector-width | Num | Manual override OpenCL vector-width to X | --opencl-vector=4</span>
<span style="color: #808080;"> -w, --workload-profile | Num | Enable a specific workload profile, see pool below | -w 3</span>
<span style="color: #808080;"> -n, --kernel-accel | Num | Manual workload tuning, set outerloop step size to X | -n 64</span>
<span style="color: #808080;"> -u, --kernel-loops | Num | Manual workload tuning, set innerloop step size to X | -u 256</span>
<span style="color: #808080;"> --nvidia-spin-damp | Num | Workaround NVidias CPU burning loop bug, in percent | --nvidia-spin-damp=50</span>
<span style="color: #808080;"> --gpu-temp-disable | | Disable temperature and fanspeed reads and triggers |</span>
<span style="color: #808080;"> --scrypt-tmto | Num | Manually override TMTO value for scrypt to X | --scrypt-tmto=3</span>
<span style="color: #808080;"> -s, --skip | Num | Skip X words from the start | -s 1000000</span>
<span style="color: #808080;"> -l, --limit | Num | Limit X words from the start + skipped words | -l 1000000</span>
<span style="color: #808080;"> --keyspace | | Show keyspace base:mod values and quit |</span>
<span style="color: #808080;"> -j, --rule-left | Rule | Single rule applied to each word from left wordlist | -j 'c'</span>
<span style="color: #808080;"> -k, --rule-right | Rule | Single rule applied to each word from right wordlist | -k '^-'</span>
<span style="color: #808080;"> -r, --rules-file | File | Multiple rules applied to each word from wordlists | -r rules/best64.rule</span>
<span style="color: #808080;"> -g, --generate-rules | Num | Generate X random rules | -g 10000</span>
<span style="color: #808080;"> --generate-rules-func-min | Num | Force min X funcs per rule |</span>
<span style="color: #808080;"> --generate-rules-func-max | Num | Force max X funcs per rule |</span>
<span style="color: #808080;"> --generate-rules-seed | Num | Force RNG seed set to X |</span>
<span style="color: #808080;"> -1, --custom-charset1 | CS | User-defined charset ?1 | -1 ?l?d?u</span>
<span style="color: #808080;"> -2, --custom-charset2 | CS | User-defined charset ?2 | -2 ?l?d?s</span>
<span style="color: #808080;"> -3, --custom-charset3 | CS | User-defined charset ?3 |</span>
<span style="color: #808080;"> -4, --custom-charset4 | CS | User-defined charset ?4 |</span>
<span style="color: #808080;"> -i, --increment | | Enable mask increment mode |</span>
<span style="color: #808080;"> --increment-min | Num | Start mask incrementing at X | --increment-min=4</span>
<span style="color: #808080;"> --increment-max | Num | Stop mask incrementing at X | --increment-max=8</span>

<span style="color: #808080;">- [ Hash modes ] -</span>

<span style="color: #808080;"># | Name | Category</span>
<span style="color: #808080;"> ======+==================================================+======================================</span>
<span style="color: #808080;"> 900 | MD4 | Raw Hash</span>
<span style="color: #808080;"> 0 | MD5 | Raw Hash</span>
<span style="color: #808080;"> 5100 | Half MD5 | Raw Hash</span>
<span style="color: #808080;"> 100 | SHA1 | Raw Hash</span>
<span style="color: #808080;"> 10800 | SHA-384 | Raw Hash</span>
<span style="color: #808080;"> 1400 | SHA-256 | Raw Hash</span>
<span style="color: #808080;"> 1700 | SHA-512 | Raw Hash</span>
<span style="color: #808080;"> 5000 | SHA-3(Keccak) | Raw Hash</span>
<span style="color: #808080;"> 10100 | SipHash | Raw Hash</span>
<span style="color: #808080;"> 6000 | RipeMD160 | Raw Hash</span>
<span style="color: #808080;"> 6100 | Whirlpool | Raw Hash</span>
<span style="color: #808080;"> 6900 | GOST R 34.11-94 | Raw Hash</span>
<span style="color: #808080;"> 11700 | GOST R 34.11-2012 (Streebog) 256-bit | Raw Hash</span>
<span style="color: #808080;"> 11800 | GOST R 34.11-2012 (Streebog) 512-bit | Raw Hash</span>
<span style="color: #808080;"> 10 | md5($pass.$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 20 | md5($salt.$pass) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 30 | md5(unicode($pass).$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 40 | md5($salt.unicode($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 3800 | md5($salt.$pass.$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 3710 | md5($salt.md5($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 2600 | md5(md5($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 4300 | md5(strtoupper(md5($pass))) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 4400 | md5(sha1($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 110 | sha1($pass.$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 120 | sha1($salt.$pass) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 130 | sha1(unicode($pass).$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 140 | sha1($salt.unicode($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 4500 | sha1(sha1($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 4700 | sha1(md5($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 4900 | sha1($salt.$pass.$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1410 | sha256($pass.$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1420 | sha256($salt.$pass) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1430 | sha256(unicode($pass).$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1440 | sha256($salt.unicode($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1710 | sha512($pass.$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1720 | sha512($salt.$pass) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1730 | sha512(unicode($pass).$salt) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 1740 | sha512($salt.unicode($pass)) | Raw Hash, Salted and / or Iterated</span>
<span style="color: #808080;"> 50 | HMAC-MD5 (key = $pass) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 60 | HMAC-MD5 (key = $salt) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 150 | HMAC-SHA1 (key = $pass) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 160 | HMAC-SHA1 (key = $salt) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 1450 | HMAC-SHA256 (key = $pass) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 1460 | HMAC-SHA256 (key = $salt) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 1750 | HMAC-SHA512 (key = $pass) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 1760 | HMAC-SHA512 (key = $salt) | Raw Hash, Authenticated</span>
<span style="color: #808080;"> 14000 | DES (PT = $salt, key = $pass) | Raw Cipher, Known-Plaintext attack</span>
<span style="color: #808080;"> 14100 | 3DES (PT = $salt, key = $pass) | Raw Cipher, Known-Plaintext attack</span>
<span style="color: #808080;"> 400 | phpass | Generic KDF</span>
<span style="color: #808080;"> 8900 | scrypt | Generic KDF</span>
<span style="color: #808080;"> 11900 | PBKDF2-HMAC-MD5 | Generic KDF</span>
<span style="color: #808080;"> 12000 | PBKDF2-HMAC-SHA1 | Generic KDF</span>
<span style="color: #808080;"> 10900 | PBKDF2-HMAC-SHA256 | Generic KDF</span>
<span style="color: #808080;"> 12100 | PBKDF2-HMAC-SHA512 | Generic KDF</span>
<span style="color: #808080;"> 23 | Skype | Network protocols</span>
<span style="color: #808080;"> 2500 | WPA/WPA2 | Network protocols</span>
<span style="color: #808080;"> 4800 | iSCSI CHAP authentication, MD5(Chap) | Network protocols</span>
<span style="color: #808080;"> 5300 | IKE-PSK MD5 | Network protocols</span>
<span style="color: #808080;"> 5400 | IKE-PSK SHA1 | Network protocols</span>
<span style="color: #808080;"> 5500 | NetNTLMv1 | Network protocols</span>
<span style="color: #808080;"> 5500 | NetNTLMv1 + ESS | Network protocols</span>
<span style="color: #808080;"> 5600 | NetNTLMv2 | Network protocols</span>
<span style="color: #808080;"> 7300 | IPMI2 RAKP HMAC-SHA1 | Network protocols</span>
<span style="color: #808080;"> 7500 | Kerberos 5 AS-REQ Pre-Auth etype 23 | Network protocols</span>
<span style="color: #808080;"> 8300 | DNSSEC (NSEC3) | Network protocols</span>
<span style="color: #808080;"> 10200 | Cram MD5 | Network protocols</span>
<span style="color: #808080;"> 11100 | PostgreSQL CRAM (MD5) | Network protocols</span>
<span style="color: #808080;"> 11200 | MySQL CRAM (SHA1) | Network protocols</span>
<span style="color: #808080;"> 11400 | SIP digest authentication (MD5) | Network protocols</span>
<span style="color: #808080;"> 13100 | Kerberos 5 TGS-REP etype 23 | Network protocols</span>
<span style="color: #808080;"> 121 | SMF (Simple Machines Forum) | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 400 | phpBB3 | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 2611 | vBulletin &lt; v3.8.5 | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 2711 | vBulletin &gt; v3.8.5 | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 2811 | MyBB | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 2811 | IPB (Invison Power Board) | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 8400 | WBB3 (Woltlab Burning Board) | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 11 | Joomla &lt; 2.5.18 | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 400 | Joomla &gt; 2.5.18 | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 400 | WordPress | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 2612 | PHPS | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 7900 | Drupal7 | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 21 | osCommerce | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 21 | xt:Commerce | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 11000 | PrestaShop | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 124 | Django (SHA-1) | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 10000 | Django (PBKDF2-SHA256) | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 3711 | Mediawiki B type | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 7600 | Redmine | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 13900 | OpenCart | Forums, CMS, E-Commerce, Frameworks</span>
<span style="color: #808080;"> 12 | PostgreSQL | Database Server</span>
<span style="color: #808080;"> 131 | MSSQL(2000) | Database Server</span>
<span style="color: #808080;"> 132 | MSSQL(2005) | Database Server</span>
<span style="color: #808080;"> 1731 | MSSQL(2012) | Database Server</span>
<span style="color: #808080;"> 1731 | MSSQL(2014) | Database Server</span>
<span style="color: #808080;"> 200 | MySQL323 | Database Server</span>
<span style="color: #808080;"> 300 | MySQL4.1/MySQL5 | Database Server</span>
<span style="color: #808080;"> 3100 | Oracle H: Type (Oracle 7+) | Database Server</span>
<span style="color: #808080;"> 112 | Oracle S: Type (Oracle 11+) | Database Server</span>
<span style="color: #808080;"> 12300 | Oracle T: Type (Oracle 12+) | Database Server</span>
<span style="color: #808080;"> 8000 | Sybase ASE | Database Server</span>
<span style="color: #808080;"> 141 | EPiServer 6.x &lt; v4 | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 1441 | EPiServer 6.x &gt; v4 | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 1600 | Apache $apr1$ | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 12600 | ColdFusion 10+ | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 1421 | hMailServer | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 101 | nsldap, SHA-1(Base64), Netscape LDAP SHA | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 111 | nsldaps, SSHA-1(Base64), Netscape LDAP SSHA | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 1711 | SSHA-512(Base64), LDAP {SSHA512} | HTTP, SMTP, LDAP Server</span>
<span style="color: #808080;"> 11500 | CRC32 | Checksums</span>
<span style="color: #808080;"> 3000 | LM | Operating-Systems</span>
<span style="color: #808080;"> 1000 | NTLM | Operating-Systems</span>
<span style="color: #808080;"> 1100 | Domain Cached Credentials (DCC), MS Cache | Operating-Systems</span>
<span style="color: #808080;"> 2100 | Domain Cached Credentials 2 (DCC2), MS Cache 2 | Operating-Systems</span>
<span style="color: #808080;"> 12800 | MS-AzureSync PBKDF2-HMAC-SHA256 | Operating-Systems</span>
<span style="color: #808080;"> 1500 | descrypt, DES(Unix), Traditional DES | Operating-Systems</span>
<span style="color: #808080;"> 12400 | BSDiCrypt, Extended DES | Operating-Systems</span>
<span style="color: #808080;"> 500 | md5crypt $1$, MD5(Unix) | Operating-Systems</span>
<span style="color: #808080;"> 3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems</span>
<span style="color: #808080;"> 7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems</span>
<span style="color: #808080;"> 1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems</span>
<span style="color: #808080;"> 122 | OSX v10.4, OSX v10.5, OSX v10.6 | Operating-Systems</span>
<span style="color: #808080;"> 1722 | OSX v10.7 | Operating-Systems</span>
<span style="color: #808080;"> 7100 | OSX v10.8, OSX v10.9, OSX v10.10 | Operating-Systems</span>
<span style="color: #808080;"> 6300 | AIX {smd5} | Operating-Systems</span>
<span style="color: #808080;"> 6700 | AIX {ssha1} | Operating-Systems</span>
<span style="color: #808080;"> 6400 | AIX {ssha256} | Operating-Systems</span>
<span style="color: #808080;"> 6500 | AIX {ssha512} | Operating-Systems</span>
<span style="color: #808080;"> 2400 | Cisco-PIX | Operating-Systems</span>
<span style="color: #808080;"> 2410 | Cisco-ASA | Operating-Systems</span>
<span style="color: #808080;"> 500 | Cisco-IOS $1$ | Operating-Systems</span>
<span style="color: #808080;"> 5700 | Cisco-IOS $4$ | Operating-Systems</span>
<span style="color: #808080;"> 9200 | Cisco-IOS $8$ | Operating-Systems</span>
<span style="color: #808080;"> 9300 | Cisco-IOS $9$ | Operating-Systems</span>
<span style="color: #808080;"> 22 | Juniper Netscreen/SSG (ScreenOS) | Operating-Systems</span>
<span style="color: #808080;"> 501 | Juniper IVE | Operating-Systems</span>
<span style="color: #808080;"> 5800 | Android PIN | Operating-Systems</span>
<span style="color: #808080;"> 13800 | Windows 8+ phone PIN/Password | Operating-Systems</span>
<span style="color: #808080;"> 8100 | Citrix Netscaler | Operating-Systems</span>
<span style="color: #808080;"> 8500 | RACF | Operating-Systems</span>
<span style="color: #808080;"> 7200 | GRUB 2 | Operating-Systems</span>
<span style="color: #808080;"> 9900 | Radmin2 | Operating-Systems</span>
<span style="color: #808080;"> 125 | ArubaOS | Operating-Systems</span>
<span style="color: #808080;"> 7700 | SAP CODVN B (BCODE) | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 7800 | SAP CODVN F/G (PASSCODE) | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 10300 | SAP CODVN H (PWDSALTEDHASH) iSSHA-1 | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 8600 | Lotus Notes/Domino 5 | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 8700 | Lotus Notes/Domino 6 | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 9100 | Lotus Notes/Domino 8 | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 133 | PeopleSoft | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 13500 | PeopleSoft Token | Enterprise Application Software (EAS)</span>
<span style="color: #808080;"> 11600 | 7-Zip | Archives</span>
<span style="color: #808080;"> 12500 | RAR3-hp | Archives</span>
<span style="color: #808080;"> 13000 | RAR5 | Archives</span>
<span style="color: #808080;"> 13200 | AxCrypt | Archives</span>
<span style="color: #808080;"> 13300 | AxCrypt in memory SHA1 | Archives</span>
<span style="color: #808080;"> 13600 | WinZip | Archives</span>
<span style="color: #808080;"> 62XY | TrueCrypt | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 1 = PBKDF2-HMAC-RipeMD160 | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 2 = PBKDF2-HMAC-SHA512 | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 3 = PBKDF2-HMAC-Whirlpool | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 4 = PBKDF2-HMAC-RipeMD160 + boot-mode | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 1 = XTS 512 bit pure AES | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 1 = XTS 512 bit pure Serpent | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 1 = XTS 512 bit pure Twofish | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit pure AES | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit pure Serpent | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit pure Twofish | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit cascaded AES-Twofish | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit cascaded Serpent-AES | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit cascaded Twofish-Serpent | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 3 = XTS 1536 bit all | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> 8800 | Android FDE &lt; v4.3 | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> 12900 | Android FDE (Samsung DEK) | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> 12200 | eCryptfs | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> 137XY | VeraCrypt | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 1 = PBKDF2-HMAC-RipeMD160 | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 2 = PBKDF2-HMAC-SHA512 | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 3 = PBKDF2-HMAC-Whirlpool | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 4 = PBKDF2-HMAC-RipeMD160 + boot-mode | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 5 = PBKDF2-HMAC-SHA256 | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> X | 6 = PBKDF2-HMAC-SHA256 + boot-mode | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 1 = XTS 512 bit pure AES | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 1 = XTS 512 bit pure Serpent | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 1 = XTS 512 bit pure Twofish | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit pure AES | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit pure Serpent | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit pure Twofish | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit cascaded AES-Twofish | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit cascaded Serpent-AES | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 2 = XTS 1024 bit cascaded Twofish-Serpent | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> Y | 3 = XTS 1536 bit all | Full-Disk encryptions (FDE)</span>
<span style="color: #808080;"> 9700 | MS Office &lt;= 2003 $0|$1, MD5 + RC4 | Documents</span>
<span style="color: #808080;"> 9710 | MS Office &lt;= 2003 $0|$1, MD5 + RC4, collider #1 | Documents</span>
<span style="color: #808080;"> 9720 | MS Office &lt;= 2003 $0|$1, MD5 + RC4, collider #2 | Documents</span>
<span style="color: #808080;"> 9800 | MS Office &lt;= 2003 $3|$4, SHA1 + RC4 | Documents</span>
<span style="color: #808080;"> 9810 | MS Office &lt;= 2003 $3|$4, SHA1 + RC4, collider #1 | Documents</span>
<span style="color: #808080;"> 9820 | MS Office &lt;= 2003 $3|$4, SHA1 + RC4, collider #2 | Documents</span>
<span style="color: #808080;"> 9400 | MS Office 2007 | Documents</span>
<span style="color: #808080;"> 9500 | MS Office 2010 | Documents</span>
<span style="color: #808080;"> 9600 | MS Office 2013 | Documents</span>
<span style="color: #808080;"> 10400 | PDF 1.1 - 1.3 (Acrobat 2 - 4) | Documents</span>
<span style="color: #808080;"> 10410 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #1 | Documents</span>
<span style="color: #808080;"> 10420 | PDF 1.1 - 1.3 (Acrobat 2 - 4), collider #2 | Documents</span>
<span style="color: #808080;"> 10500 | PDF 1.4 - 1.6 (Acrobat 5 - 8) | Documents</span>
<span style="color: #808080;"> 10600 | PDF 1.7 Level 3 (Acrobat 9) | Documents</span>
<span style="color: #808080;"> 10700 | PDF 1.7 Level 8 (Acrobat 10 - 11) | Documents</span>
<span style="color: #808080;"> 9000 | Password Safe v2 | Password Managers</span>
<span style="color: #808080;"> 5200 | Password Safe v3 | Password Managers</span>
<span style="color: #808080;"> 6800 | Lastpass + Lastpass sniffed | Password Managers</span>
<span style="color: #808080;"> 6600 | 1Password, agilekeychain | Password Managers</span>
<span style="color: #808080;"> 8200 | 1Password, cloudkeychain | Password Managers</span>
<span style="color: #808080;"> 11300 | Bitcoin/Litecoin wallet.dat | Password Managers</span>
<span style="color: #808080;"> 12700 | Blockchain, My Wallet | Password Managers</span>
<span style="color: #808080;"> 13400 | Keepass 1 (AES/Twofish) and Keepass 2 (AES) | Password Managers</span>

<span style="color: #808080;">- [ Outfile Formats ] -</span>

<span style="color: #808080;"># | Format</span>
<span style="color: #808080;"> ===+========</span>
<span style="color: #808080;"> 1 | hash[:salt]</span>
<span style="color: #808080;"> 2 | plain</span>
<span style="color: #808080;"> 3 | hash[:salt]:plain</span>
<span style="color: #808080;"> 4 | hex_plain</span>
<span style="color: #808080;"> 5 | hash[:salt]:hex_plain</span>
<span style="color: #808080;"> 6 | plain:hex_plain</span>
<span style="color: #808080;"> 7 | hash[:salt]:plain:hex_plain</span>
<span style="color: #808080;"> 8 | crackpos</span>
<span style="color: #808080;"> 9 | hash[:salt]:crack_pos</span>
<span style="color: #808080;"> 10 | plain:crack_pos</span>
<span style="color: #808080;"> 11 | hash[:salt]:plain:crack_pos</span>
<span style="color: #808080;"> 12 | hex_plain:crack_pos</span>
<span style="color: #808080;"> 13 | hash[:salt]:hex_plain:crack_pos</span>
<span style="color: #808080;"> 14 | plain:hex_plain:crack_pos</span>
<span style="color: #808080;"> 15 | hash[:salt]:plain:hex_plain:crack_pos</span>

<span style="color: #808080;">- [ Rule Debugging Modes ] -</span>

<span style="color: #808080;"># | Format</span>
<span style="color: #808080;"> ===+========</span>
<span style="color: #808080;"> 1 | Finding-Rule</span>
<span style="color: #808080;"> 2 | Original-Word</span>
<span style="color: #808080;"> 3 | Original-Word:Finding-Rule</span>
<span style="color: #808080;"> 4 | Original-Word:Finding-Rule:Processed-Word</span>

<span style="color: #808080;">- [ Attack Modes ] -</span>

<span style="color: #808080;"># | Mode</span>
<span style="color: #808080;"> ===+======</span>
<span style="color: #808080;"> 0 | Straight</span>
<span style="color: #808080;"> 1 | Combination</span>
<span style="color: #808080;"> 3 | Brute-force</span>
<span style="color: #808080;"> 6 | Hybrid Wordlist + Mask</span>
<span style="color: #808080;"> 7 | Hybrid Mask + Wordlist</span>

<span style="color: #808080;">- [ Built-in Charsets ] -</span>

<span style="color: #808080;">? | Charset</span>
<span style="color: #808080;"> ===+=========</span>
<span style="color: #808080;"> l | abcdefghijklmnopqrstuvwxyz</span>
<span style="color: #808080;"> u | ABCDEFGHIJKLMNOPQRSTUVWXYZ</span>
<span style="color: #808080;"> d | 0123456789</span>
<span style="color: #808080;"> s | !"#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^_`{|}~</span>
<span style="color: #808080;"> a | ?l?u?d?s</span>
<span style="color: #808080;"> b | 0x00 - 0xff</span>

<span style="color: #808080;">- [ OpenCL Device Types ] -</span>

<span style="color: #808080;"># | Device Type</span>
<span style="color: #808080;"> ===+=============</span>
<span style="color: #808080;"> 1 | CPU</span>
<span style="color: #808080;"> 2 | GPU</span>
<span style="color: #808080;"> 3 | FPGA, DSP, Co-Processor</span>

<span style="color: #808080;">- [ Workload Profiles ] -</span>

<span style="color: #808080;"># | Performance | Runtime | Power Consumption | Desktop Impact</span>
<span style="color: #808080;"> ===+=============+=========+===================+=================</span>
<span style="color: #808080;"> 1 | Low | 2 ms | Low | Minimal</span>
<span style="color: #808080;"> 2 | Default | 12 ms | Economic | Noticeable</span>
<span style="color: #808080;"> 3 | High | 96 ms | High | Unresponsive</span>
<span style="color: #808080;"> 4 | Nightmare | 480 ms | Insane | Headless</span>

<span style="color: #808080;">- [ Basic Examples ] -</span>

<span style="color: #808080;">Attack- | Hash- |</span>
<span style="color: #808080;"> Mode | Type | Example command</span>
<span style="color: #808080;"> ==================+=======+==================================================================</span>
<span style="color: #808080;"> Wordlist | $P$ | hashcat -a 0 -m 400 example400.hash example.dict</span>
<span style="color: #808080;"> Wordlist + Rules | MD5 | hashcat -a 0 -m 0 example0.hash example.dict -r rules/best64.rule</span>
<span style="color: #808080;"> Brute-Force | MD5 | hashcat -a 3 -m 0 example0.hash ?a?a?a?a?a?a</span>
<span style="color: #808080;"> Combinator | MD5 | hashcat -a 1 -m 0 example0.hash example.dict example.dict</span></pre>
<p>If you still have no idea what just happened try following pages:</p>
<p>* <a href="https://hashcat.net/wiki/#howtos_videos_papers_articles_etc_in_the_wild">https://hashcat.net/wiki/#howtos_videos_papers_articles_etc_in_the_wild</a><br />
* <a href="https://hashcat.net/wiki/#frequently_asked_questions">https://hashcat.net/wiki/#frequently_asked_questions</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2016/09/hashcat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
