2017-01-12 94 views
0

我正在使用CryptoJs在客戶端上傳到服務器之前對其中的文件進行加密。加密和解密正在工作,但我的問題是這有多安全。在我的javascript中,我將「祕密密碼」作爲參數傳遞給加密函數。我用來解密的所有內容也都是相同的密碼。那麼,如果有人能夠獲得這個「祕密密碼」,他們難道不能輕易解密數據嗎?使用CryptoJS發送'密碼密碼'(密鑰/ iv)

Crytpjs:

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase"); 
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase"); 
+0

如果有人要收購的加密中使用的鹽和知道你用什麼樣的加密,他們可以解密,但適合所有的加密相同。 – SaggingRufus

+0

如果有人有你的房子的鑰匙,他可能能夠進入它,如果他能夠找到門 –

+0

請記住,這是爲什麼只要允許,鹽是最好的隨機字符串。 – SaggingRufus

回答

0

AES是用於加密的對稱算法。這意味着用於加密和解密的密鑰(祕密密碼短語)是相同的。

因此,它的安全性主要依賴於保持關鍵安全。如果有人獲得密鑰,他們將能夠解密用該密碼加密的任何內容。

我通常建議,如果加密數據要共享,然後通過一個通道(電子郵件或雲服務器)共享數據並通過不同的通道(WhatsApp,電話等)發送密鑰。

+0

即使我沒有發送密鑰和數據,因爲這是JavaScript,它可以很容易地找到,是正確的?我的意思是在瀏覽器中,如果有人用F12,你可以看到腳本中的所有值。我仍然將加密對象本身發送到服務器。 – Noob

+0

正確!避免它的一種方法,可能是讓用戶在加密文件之前輸入密鑰。另一種是生成一個隨機密鑰並告訴用戶寫下來。 – adonike

2

如果你的要求是要加密上傳的文件,但可見的服務器,你應該僅僅是使用TLS。沒有理由使用其他任何東西。

如果你的要求是上傳的文件進行加密,這樣,即使是服務器無法對它們進行解密,然後簡單地要求用戶輸入密碼,申請PBKDF2和使用結果的關鍵。

如果你要保持你當前的代碼,有一些事情你應該改變。目前,它看起來像你正在使用ECB模式(你不提供IV)。 ECB模式不安全,不應使用。另外,您需要一種方法來確保數據在傳輸過程中未被更改。您應該應用HMAC並將其追加到最後。

+0

我的要求是在上傳之前應該對文件進行加密。所以客戶端加密。它也不應該在服務器上可讀。從服務器,我解密並將原始文件發送到存儲庫。 – Noob

+0

Sooo ...它不應該在服務器上可見,但服務器仍然解密它?哪一個? –

+0

誠實地聽起來你只需要TLS。 –

-1

使用Javascript obfuscation解決了。這是掩蓋腳本內容的一種很好的方法。

+0

請注意,根據定義,混淆也是完全可逆的,並提供**無任何安全級別**。 –