非對稱加密js
㈠ javascript 提交加密用戶輸入的密碼,求教程!!!
這個……
你說的事情是可以實現啦,但是沒什麼實際意義呀。
沒有人 會自己通過js去實現一個加密的。
首先,加密就是為了不能破解。但是js又是對客戶端開放的。也就是說你的演算法中加密演算法部分和密鑰都是透明的,而明文就是用戶提交的數據,對用戶也是透明的。
如果是對稱演算法,那麼你加密和沒加密是一樣的。因為加密演算法和密鑰都給人家了,反算即可。
如果是非對稱的演算法,估計你還沒等發送數據,演算法本身就把客戶端的瀏覽器掛死了。
所以即使要加密也不應該在js 想辦法,應該在傳輸協議上想辦法。https 可以完全解決你的加密需求的。
當然,如果你說的不是加密,而是MD5的簽名演算法倒是可以實現,也有意義。
如果你不明白我說的 什麼是 加密演算法,密鑰,明文,密文,什麼的對稱非對稱,那……還是老老實實用https 吧
㈡ nodejs crypto.privateencrypt方法怎麼使用
就是加密和解密使用同一個密鑰,通常稱之為「Session Key 」這種加密技術在當今被廣泛採用,如美國政府所採用的DES加密標准就是一種典型的「對稱式」加密法,它的Session Key長度為56bits。 非對稱式加密: 就是加密和解密所使用的不是同一個密鑰,...
㈢ 關於javascript中的非對稱加密以及中間人攻擊的疑問
你下載一個httpWatch, 打開web.qq.com 輸入帳號密碼,就能截獲到帳號密碼驗證碼。只要他是適用http通信,就都能截獲到。
㈣ HTTP,SSL/TLS和HTTPS協議的區別與聯系
概述:HTTP是普通明文傳輸協議,HTTPS是加密協議,相當於HTTP的安全版本,但需要HTTPS加密必須擁有SSL證書與TLS協議交流產生,SSL證書在線簽發:網頁鏈接
1、「HTTP」是什麼?
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網路協議,所有的WWW文件都必須遵守這個標准,設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法(具體可查看馬海祥博客《深入解析互聯網協議的原理》的相關介紹)。
1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法,並稱之為超文本(hypertext),這成為了HTTP超文本傳輸協議標准架構的發展根基。
簡單來說,HTTP就是一個網路協議,是專門用來幫你傳輸Web內容的,關於這個協議,就算你不了解,至少也聽說過吧?比如你訪問我的博客的主頁,瀏覽器地址欄會出現的網址:http://www.mahaixiang.cn,大部分網站都是通過HTTP協議來傳輸Web頁面、以及Web頁面上包含的各種東東(圖片、CSS 樣式、JS 腳本)。
2、「SSL/TLS」是什麼?
SSL是「Secure Sockets Layer」的縮寫,中文叫做「安全套接層」,它是在上世紀90年代中期,由網景公司設計的(順便插一句,網景公司不光發明了 SSL,還發明了很多 Web 的基礎設施——比如「CSS 樣式表」和「JS 腳本」)。
為啥要發明SSL這個協議捏?因為原先互聯網上使用的HTTP協議是明文的,存在很多缺點——比如傳輸內容會被偷窺(嗅探)和篡改,發明SSL協議,就是為了解決這些問題。
到了1999年,SSL因為應用廣泛,已經成為互聯網上的事實標准,IETF就在那年把SSL標准化,標准化之後的名稱改為TLS(是「Transport Layer Security」的縮寫),中文叫做「傳輸層安全協議」。
很多相關的文章都把這兩者並列稱呼(SSL/TLS),因為這兩者可以視作同一個東西的不同階段。
3、「HTTPS」是什麼意思?
解釋完 HTTP 和 SSL/TLS,現在就可以來解釋 HTTPS 啦,咱們通常所說的 HTTPS 協議,說白了就是「HTTP 協議」和「SSL/TLS 協議」的組合,你可以把 HTTPS 大致理解為——「HTTP over SSL」或「HTTP over TLS」(反正 SSL 和 TLS 差不多)。
HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
它是一個URI scheme(抽象標識符體系),句法類同http:體系,用於安全的HTTP數據傳輸。
https:URL表明它使用了HTTP,但HTTPS存在不同於HTTP的默認埠及一個加密/身份驗證層(在HTTP與TCP之間),這個系統的最初研發由網景公司(Netscape)進行,並內置於其瀏覽器Netscape Navigator中,提供了身份驗證與加密通訊方法,現在它被廣泛用於萬維網上安全敏感的通訊,例如交易支付方面。
4、談談「對稱加密」和「非對稱加密」的概念
如果我們想搞明白「對稱加密」和「非對稱加密」的概念,首先,我們就要先知道什麼是「加密」和「解密」?
(1)、什麼是「加密」和「解密」?
通俗而言,你可以把「加密」和「解密」理解為某種互逆的數學運算,就好比「加法和減法」互為逆運算、「乘法和除法」互為逆運算。
「加密」的過程,就是把「明文」變成「密文」的過程;反之,「解密」的過程,就是把「密文」變為「明文」,在這兩個過程中,都需要一個關鍵的東東——叫做「密鑰」——來參與數學運算。
(2)、什麼是「對稱加密」?
所謂的「對稱加密技術」,意思就是說:「加密」和「解密」使用相同的密鑰。這個比較好理解,就好比你用 7zip 或 WinRAR 創建一個帶密碼(口令)的加密壓縮包,當你下次要把這個壓縮文件解開的時候,你需要輸入同樣的密碼,在這個例子中,密碼/口令就如同剛才說的「密鑰」。
對稱加密是最快速、最簡單的一種加密方式,加密(encryption)與解密(decryption)用的是同樣的密鑰(secret key),這種方法在密碼學中叫做對稱加密演算法,對稱加密有很多種演算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。
(3)、什麼是「非對稱加密」?
所謂的「非對稱加密技術」,意思就是說:「加密」和「解密」使用不同的密鑰,這玩意兒比較難理解,也比較難想到,當年「非對稱加密」的發明,還被譽為「密碼學」歷史上的一次革命。
非對稱加密為數據的加密與解密提供了一個非常安全的方法,它使用了一對密鑰,公鑰(public key)和私鑰(private key),私鑰只能由一方安全保管,不能外泄,而公鑰則可以發給任何請求它的人,非對稱加密使用這對密鑰中的一個進行加密,而解密則需要另一個密鑰。
由於篇幅有限,對「非對稱加密」這個話題,我就不展開了,有空的話,我會再單獨寫一篇文章在馬海祥博客上發布。
(4)、各自有啥優缺點?
看完剛才的定義,很顯然:(從功能角度而言)「非對稱加密」能乾的事情比「對稱加密」要多,這是「非對稱加密」的優點,但是「非對稱加密」的實現,通常需要涉及到「復雜數學問題」,所以,「非對稱加密」的性能通常要差很多(相對於「對稱加密」而言)。
這兩者的優缺點,也影響到了 SSL 協議的設計。
5、HTTP協議的特點
作為背景知識介紹,還需要再稍微談一下 HTTP 協議本身的特點,HTTP本身有很多特點,考慮到篇幅有限,馬海祥只談那些和HTTPS相關的特點,想要了解更深入的HTTP知識,可查看馬海祥博客《HTTP服務的七層架構技術解析及運用》的相關介紹。
(1)、HTTP的版本和歷史
如今咱們用的 HTTP 協議,版本號是 1.1(也就是 HTTP 1.1),這個 1.1 版本是1995年底開始起草的(技術文檔是RFC2068),並在1999年正式發布(技術文檔是RFC2616)。
在 1.1 之前,還有曾經出現過兩個版本「0.9 和 1.0」,其中的 HTTP 0.9 沒有被廣泛使用,而 HTTP 1.0 被廣泛使用過。
(2)、HTTP 和 TCP 之間的關系
簡單地說,TCP 協議是 HTTP 協議的基石——HTTP 協議需要依靠 TCP 協議來傳輸數據。
在網路分層模型中,TCP 被稱為「傳輸層協議」,而 HTTP 被稱為「應用層協議」。
有很多常見的應用層協議是以 TCP 為基礎的,比如「FTP、SMTP、POP、IMAP」等。
TCP被稱為「面向連接」的傳輸層協議,關於它的具體細節,俺就不展開了(否則篇幅又失控了),你只需知道:傳輸層主要有兩個協議,分別是TCP和UDP,TCP比UDP更可靠,你可以把 TCP 協議想像成某個水管,發送端這頭進水,接收端那頭就出水,並且 TCP 協議能夠確保,先發送的數據先到達(與之相反,UDP不保證這點)。
(3)、HTTP協議如何使用 TCP 連接?
HTTP對 TCP 連接的使用,分為兩種方式:俗稱「短連接」和「長連接」(「長連接」又稱「持久連接」,叫做「Keep-Alive」或「Persistent Connection」)
假設有一個網頁,裡麵包含好多圖片,還包含好多外部的CSS文件和JS文件,在「短連接」的模式下,瀏覽器會先發起一個 TCP 連接,拿到該網頁的 HTML 源代碼(拿到 HTML 之後,這個 TCP 連接就關閉了)。然後,瀏覽器開始分析這個網頁的源碼,知道這個頁麵包含很多外部資源(圖片、CSS、JS)。然後針對每一個外部資源,再分別發起一個個 TCP 連接,把這些文件獲取到本地(同樣的,每抓取一個外部資源後,相應的 TCP 就斷開)。
相反,如果是「長連接」的方式,瀏覽器也會先發起一個 TCP 連接去抓取頁面,但是抓取頁面之後,該 TCP 連接並不會立即關閉,而是暫時先保持著(所謂的「Keep-Alive」),然後瀏覽器分析 HTML 源碼之後,發現有很多外部資源,就用剛才那個 TCP 連接去抓取此頁面的外部資源。
在 HTTP 1.0 版本,默認使用的是「短連接」(那時候是 Web 誕生初期,網頁相對簡單,「短連接」的問題不大)。
到了1995年底開始制定 HTTP 1.1 草案的時候,網頁已經開始變得復雜(網頁內的圖片、腳本越來越多了),這時候再用短連接的方式,效率太低下了(因為建立 TCP 連接是有「時間成本」和「CPU成本」),所以,在 HTTP 1.1 中,默認採用的是「Keep-Alive」的方式。
6、SSL/TLS協議的基本運行過程
SSL/TLS協議的基本思路是採用公鑰加密法,也就是說,客戶端先向伺服器端索要公鑰,然後用公鑰加密信息,伺服器收到密文後,用自己的私鑰解密,但是這里有兩個問題:
(1)、如何保證公鑰不被篡改?
解決方法:將公鑰放在數字證書中,只要證書是可信的,公鑰就是可信的。
(2)、公鑰加密計算量太大,如何減少耗用的時間?
解決方法:每一次對話(session),客戶端和伺服器端都生成一個"對話密鑰"(session key),用它來加密信息。由於"對話密鑰"是對稱加密,所以運算速度非常快,而伺服器公鑰只用於加密"對話密鑰"本身,這樣就減少了加密運算的消耗時間。
因此,SSL/TLS協議的基本過程是這樣的:
(1)、客戶端向伺服器端索要並驗證公鑰。
(2)、雙方協商生成「對話密鑰」。
(3)、雙方採用「對話密鑰」進行加密通信。
7、SSL、HTTP和HTTPS協議的聯系
SSL是Netscape公司所提出的安全保密協議,在瀏覽器(如Internet Explorer、Netscape Navigator)和Web伺服器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之間構造安全通道來進行數據傳輸,SSL運行在TCP/IP層之上、應用層之下,為應用程序提供加密數據通道,它採用了RC4、MD5 以及RSA等加密演算法,使用40位的密鑰,適用於商業信息的加密。
同時,Netscape公司相應開發了HTTPS協議並內置於其瀏覽器中,HTTPS實際上就是SSL over HTTP,它使用默認埠443,而不是像HTTP那樣使用埠80來和TCP/IP進行通信。HTTPS協議使用SSL在發送方把原始數據進行加密,然後在接受方進行解密,加密和解密需要發送方和接受方通過交換共知的密鑰來實現,因此,所傳送的數據不容易被網路黑客截獲和解密。
然而,加密和解密過程需要耗費系統大量的開銷,嚴重降低機器的性能,相關測試數據表明使用HTTPS協議傳輸數據的工作效率只有使用HTTP協議傳輸的十分之一。
假如為了安全保密,將一個網站所有的Web應用都啟用SSL技術來加密,並使用HTTPS協議進行傳輸,那麼該網站的性能和效率將會大大降低,而且沒有這個必要,因為一般來說並不是所有數據都要求那麼高的安全保密級別,所以,我們只需對那些涉及機密數據的交互處理使用HTTPS協議,這樣就做到魚與熊掌兼得(具體可查看馬海祥博客《從SEO的角度來分析網站是否該採用HTTPS協議》的相關介紹)。
總之不需要用https的地方,就盡量不要用。
8、HTTPS協議的需求是什麼?
花了好多口水,終於把背景知識說完了,下面正式進入正題,先來說說當初設計HTTPS是為了滿足哪些需求?
很多介紹 HTTPS 的文章一上來就給你講實現細節,對此,馬海祥覺得這是不好的做法,一上來就給你講協議細節,你充其量只能知道如何做,無法理解為什麼,我在前一個章節講了「背景知識」,在這個章節講了「需求」,這就有助於你理解了。
為什麼要設計成這樣?——這就是 WHY 型的問題。
(1)、兼容性
因為是先有 HTTP 再有 HTTPS,所以,HTTPS 的設計者肯定要考慮到對原有 HTTP 的兼容性。
這里所說的兼容性包括很多方面,比如已有的 Web 應用要盡可能無縫地遷移到 HTTPS;比如對瀏覽器廠商而言,改動要盡可能小。
基於「兼容性」方面的考慮,很容易得出如下幾個結論:
①、HTTPS還是要基於 TCP 來傳輸
如果改為 UDP 作傳輸層,無論是 Web 服務端還是瀏覽器客戶端,都要大改,動靜太大了。
②、單獨使用一個新的協議,把 HTTP 協議包裹起來
所謂的「HTTP over SSL」,實際上是在原有的 HTTP 數據外面加了一層 SSL 的封裝,HTTP 協議原有的 GET、POST 之類的機制,基本上原封不動。
打個比方:如果原來的 HTTP 是塑料水管,容易被戳破;那麼如今新設計的 HTTPS 就像是在原有的塑料水管之外,再包一層金屬水管,一來,原有的塑料水管照樣運行;二來,用金屬加固了之後,不容易被戳破。
(2)、可擴展性
前面說了,HTTPS 相當於是「HTTP over SSL」。
如果 SSL 這個協議在「可擴展性」方面的設計足夠牛逼,那麼它除了能跟 HTTP 搭配,還能夠跟其它的應用層協議搭配,豈不美哉?
現在看來,當初設計 SSL 的人確實比較牛,如今的 SSL/TLS 可以跟很多常用的應用層協議(比如:FTP、SMTP、POP、Telnet)搭配,來強化這些應用層協議的安全性。
接著剛才打的比方:如果把 SSL/TLS 視作一根用來加固的金屬管,它不僅可以用來加固輸水的管道,還可以用來加固輸煤氣的管道。
(3)、保密性(防泄密)
HTTPS需要做到足夠好的保密性。
說到保密性,首先要能夠對抗嗅探(行話叫 Sniffer),所謂的「嗅探」,通俗而言就是監視你的網路傳輸流量,如果你使用明文的 HTTP 上網,那麼監視者通過嗅探,就知道你在訪問哪些網站的哪些頁面。
嗅探是最低級的攻擊手法,除了嗅探,HTTPS 還需要能對抗其它一些稍微高級的攻擊手法——比如「重放攻擊」(後面講協議原理的時候,會再聊)。
(4)、完整性(防篡改)
除了「保密性」,還有一個同樣重要的目標是「確保完整性」。
在發明 HTTPS 之前,由於 HTTP 是明文的,不但容易被嗅探,還容易被篡改。
舉個例子:比如咱們的網路運營商(ISP)都比較流氓,經常有網友抱怨說訪問某網站(本來是沒有廣告的),竟然會跳出很多中國電信的廣告,為啥會這樣呢?因為你的網路流量需要經過 ISP 的線路才能到達公網,如果你使用的是明文的 HTTP,ISP 很容易就可以在你訪問的頁面中植入廣告。
所以,當初設計 HTTPS 的時候,還有一個需求是「確保 HTTP 協議的內容不被篡改」。
(5)、真實性(防假冒)
在談到 HTTPS 的需求時,「真實性」經常被忽略,其實「真實性」的重要程度不亞於前面的「保密性」和「完整性」。
舉個例子:你因為使用網銀,需要訪問該網銀的 Web 站點,那麼,你如何確保你訪問的網站確實是你想訪問的網站?
有些天真的同學會說:通過看網址裡面的域名,來確保,為啥說這樣的同學是「天真的」?因為 DNS 系統本身是不可靠的(尤其是在設計 SSL 的那個年代,連 DNSSEC 都還沒發明),由於 DNS 的不可靠(存在「域名欺騙」和「域名劫持」),你看到的網址裡面的域名未必是真實滴!
所以,HTTPS 協議必須有某種機制來確保「真實性」的需求(至於如何確保,後面會細聊)。
9、HTTPS和HTTP的區別
超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。
為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,並為瀏覽器和伺服器之間的通信加密。
一般來說,HTTPS和HTTP的區別主要為以下四點:
(1)、https協議需要到ca申請證書,一般免費證書很少,需要交費。
(2)、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
(3)、http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。
(4)、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全(具體可查看馬海祥博客《HTTP與HTTPS的區別》的相關介紹)。
10、HTTPS和HTTP的性能比較
再來說最後一個需求——性能。
本來簡單的http協議,一個get一個response,由於https要還密鑰和確認加密演算法的需要,單握手就需要6、7個往返,任何應用中,過多的round trip肯定影響性能,接下來才是具體的http協議,每一次響應或者請求,都要求客戶端和服務端對會話的內容做加密/解密。
盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL晶元,如果CPU信能比較低的話,肯定會降低性能,從而不能serve更多的請求,加密後數據量的影響,所以,才會出現那麼多的安全認證提示(具體可查看馬海祥博客《HTTPS對網站性能優化的影響》的相關介紹)。
一般來說,引入HTTPS之後,不能導致性能變得太差,否則的話,誰還願意用?
為了確保性能,SSL 的設計者至少要考慮如下幾點:
(1)、如何選擇加密演算法(「對稱」or「非對稱」)?
(2)、如何兼顧 HTTP 採用的「短連接」TCP 方式?
SSL 是在1995年之前開始設計的,那時候的 HTTP 版本還是 1.0,默認使用的是「短連接」的 TCP 方式——默認不啟用 Keep-Alive。
HTTPS的關鍵性能影響是CPU和往返,如果CPU很強的話,性能可能就是有人講的80%;如果cpu是瓶頸的話,有人講原來可以server330-500個請求每秒,現在只有30-50%,因此在使用https請求數據的時候要注意看看你的項目裡面是否真的需要。
㈤ Web前端密碼加密是否有意義
密碼在前端加密完全沒有意義,對密碼系統的安全性不會有任何提高,反而會引發不必要的麻煩。首先,做前端開發的人需要知道,前端系統的控制權是完全在用戶手裡的,也就是說,前端做什麼事情,用戶有完全的控制權。假設如同 @陳軒所說,前端做過了md5,後台就不用做了,這個做法會有什麼後果?如果某一天,這個系統的資料庫泄露了,黑客就直接拿到了每個用戶的密碼md5值,但此時,由於黑客知道密碼是在前端進行哈希的,所以他不需要爆破出該md5對應的原文是什麼,而是直接修改客戶端向伺服器發出的請求,把密碼欄位換成資料庫中MD5就可以了,由於與資料庫中記錄一致,直接就會登錄成功。這跟直接存儲明文密碼沒有任何區別!!!所以不管前端是不是加密了密碼,後台使用安全的哈希演算法對內容再次轉換是非常有必要的。(MD5可不行,要用bcrypt,我之前回答過一個類似的:隨著顯卡性能的高速發展,目前的快速Hash演算法是否已經變得不夠安全了?)這個回答還有一個人贊同,希望大家別被錯誤答案誤導了。另外一個答案 @林鴻所說,在非安全HTTP連接上,可以防止原始密碼被竊聽。但問題在於由於你的登錄系統接受的哈希過的密碼,而不是原文,竊聽者根本不需要原始密碼,只要通過哈希結果就可以偽造請求登錄系統。這樣做只能防止被竊聽到原文的密碼被攻擊者用在社會學攻擊上,而不能改善該網站的安全性。所以不管前端是不是加密了密碼,使用HTTPS安全連接進行登錄都是非常有必要的。以上我說的兩點,合起來看就是:不管前端是否加密了密碼,都不能以此為假設,讓後端設計的安全等級下降,否則就會有嚴重的安全問題。實際上,前端進行密碼加密,可以看做幫助用戶多進行了一次原文的轉換,不管用了什麼加密演算法,算出來的結果都是密碼原文,你該如何保護用戶的原始密碼,就該如何保護此處的加密結果,因為對你的登錄系統來說,它們都是密碼原文。以上這些,說明了密碼加密是沒有什麼意義的,接下來,我要說明前端加密會帶來什麼問題。有些人會認為前端進行了加密,可以降低後台的安全性需求,這種錯誤的觀念會造成系統的安全漏洞。實際上,你不能對前端做任何的假設,所有跟安全相關的技術,都必須應用在後台上。前端進行加密會造成頁面需要js腳本才能運行,那麼假設你的系統需要兼容不能運行js的客戶端,就必須再設計一個使用原文的登錄介面。由於前端是不是加密,所有安全機制都必須照常應用,所以為系統增加這樣的復雜性是完全沒必要的,即使傳輸明文密碼,只要正確使用了HTTPS連接和伺服器端安全的哈希演算法,密碼系統都可以是很安全的。
㈥ 非vue項目在js里使用jsencrypt
java,thinkPHP等都可以使用jsencrypt.js。
使用jsencrypt.js的目的是實現對數據進行加密傳輸,因為JSEncrypt屬於RSA加密,RSA加密演算法是一種非對稱加密演算法,RSA加密使用了"一對"密鑰.分別是公鑰和私鑰,使用公鑰加密的數據,利用私鑰進行解密,使用私鑰加密的數據,利用公鑰進行解密。
在前端項目中使用jsencrypt進行欄位加密的使用步驟(以PHP為例):獲取公鑰;實例化對象;設置公鑰;將所需數據進行加密然後返回。
㈦ 關於nodejs 怎麼實現 crypto des加密
就是加密和解密使用同一個密鑰,通常稱之為「Session Key 」這種加密技術在當今被廣泛採用,如美國政府所採用的DES加密標准就是一種典型的「對稱式」加密法,它的Session Key長度為56bits。
非對稱式加密:
就是加密和解密所使用的不是同一個密鑰,通常有兩個密鑰,稱為「公鑰」和「私鑰」,它們兩個必需配對使用,否則不能打開加密文件。
加密為系統中經常使用的功能,node自帶強大的加密功能Crypto,下面通過簡單的例子進行練習。
1、加密模塊的引用:
var crypto=require('crypto');
var $=require('underscore');var DEFAULTS = {
encoding: {
input: 'utf8',
output: 'hex'
},
algorithms: ['bf', 'blowfish', 'aes-128-cbc']
};
默認加密演算法配置項:
輸入數據格式為utf8,輸出格式為hex,
演算法使用bf,blowfish,aes-128-abc三種加密演算法;
2、配置項初始化:
function MixCrypto(options) {
if (typeof options == 'string')
options = { key: options };
options = $.extend({}, DEFAULTS, options);
this.key = options.key;
this.inputEncoding = options.encoding.input;
this.outputEncoding = options.encoding.output;
this.algorithms = options.algorithms;
}
加密演算法可以進行配置,通過配置option進行不同加密演算法及編碼的使用。
3、加密方法代碼如下:
MixCrypto.prototype.encrypt = function (plaintext) {
return $.rece(this.algorithms, function (memo, a) {
var cipher = crypto.createCipher(a, this.key);
return cipher.update(memo, this.inputEncoding, this.outputEncoding)
+ cipher.final(this.outputEncoding)
}, plaintext, this);
};
使用crypto進行數據的加密處理。
4、解密方法代碼如下:
MixCrypto.prototype.decrypt = function (crypted) {
try {
return $.receRight(this.algorithms, function (memo, a) {
var decipher = crypto.createDecipher(a, this.key);
return decipher.update(memo, this.outputEncoding, this.inputEncoding)
+ decipher.final(this.inputEncoding);
}, crypted, this);
} catch (e) {
return;
}
};
㈧ 網站JS分析教程,不找javascript教材, 找的是如何分析網頁的教程!
不要學習密碼學,請專注你使用的加密解密API.
MD5, JS不知道,但是Java有很多,這個請網路。
關於教程,沒教程,在應用層,這個太簡單,沒人寫。
MD5是非對稱加密方式,意思是實際應用中不存在解密。
只有要破解別人的東西時候才會涉及解密,如果沒有鹽值,或其他的輔助加密。
對於簡單的MD5使用帶關鍵字的暴力破解就可以了。
㈨ 如何保證用戶登錄時提交密碼已經加密
這個……你說的事情是可以實現啦,但是沒什麼實際意義呀。沒有人會自己通過js去實現一個加密的。首先,加密就是為了不能破解。但是js又是對客戶端開放的。也就是說你的演算法中加密演算法部分和密鑰都是透明的,而明文就是用戶提交的數據,對用戶也是透明的。如果是對稱演算法,那麼你加密和沒加密是一樣的。因為加密演算法和密鑰都給人家了,反算即可。如果是非對稱的演算法,估計你還沒等發送數據,演算法本身就把客戶端的瀏覽器掛死了。所以即使要加密也不應該在js想法,應該在傳輸協議上想法。https可以完全解決你的加密需求的。當然,如果你說的不是加密,而是MD5的簽名演算法倒是可以實現,也有意義。如果你不明白我說的什麼是加密演算法,密鑰,明文,密文,什麼的對稱非對稱,那……還是老老實實用https吧