2013-08-16 7 views
74

Jestem zainteresowany budowaniem małej aplikacji do użytku osobistego, która będzie szyfrować i odszyfrowywać informacje po stronie klienta przy użyciu JavaScript. Zaszyfrowane informacje będą przechowywane w bazie danych na serwerze, ale nigdy w odszyfrowanej wersji.Szyfrowanie i odszyfrowywanie ciągów znaków JavaScript?

To nie musi być super duper bezpieczne, ale chciałbym użyć obecnie nieprzerwanego algorytmu.

Idealnie byłbym w stanie zrobić coś takiego

var gibberish = encrypt(string, salt, key); 

generować zakodowany ciąg, i coś

var sensical = decrypt(gibberish, key); 

aby je zdekodować później.

tej pory widziałem to: http://bitwiseshiftleft.github.io/sjcl/

Wszelkie inne biblioteki mam patrzeć?

+2

Spójrz na szyfrowaniu AES [JavaScript] (http://stackoverflow.com/questions/793812/javascript -aes-encryption) – mc10

+2

http://jsfiddle.net/kein1945/M9K2c/ –

+7

Niektóre terminy tutaj są wyłączone. Oto prosta wersja: 1. Sole są dodawane do informacji (zwykle haseł), które są mieszane. Ich celem jest uczynienie mieszania innym niż bez soli. Jest to użyteczne, ponieważ powoduje wstępne wygenerowanie skrótów, jeśli baza danych zostanie zhakowana i zaszyfrowane hasła użytkownika. 2. Hashowanie jest operacją jednokierunkową, która tłumaczy dane wejściowe na wynik. Nie można go łatwo odwrócić ani cofnąć. 3. Kodowanie nie jest szyfrowane. base64_encode, urlencode, itp. – des

Odpowiedz

36

Co powiecie na CryptoJS?

Jest to solidna biblioteka kryptograficzna z dużą funkcjonalnością. Implementuje on programy mieszające, HMAC, PBKDF2 i szyfry. W tym przypadku potrzebne są szyfry. Sprawdź szybką reakcję na stronie głównej projektu.

Można zrobić coś z AES:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script> 

<script> 
    var encryptedAES = CryptoJS.AES.encrypt("Message", "My Secret Passphrase"); 
    var decryptedBytes = CryptoJS.AES.decrypt(encryptedAES, "My Secret Passphrase"); 
    var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8); 
</script> 

chodzi o bezpieczeństwo, w momencie mojego pisania algorytm AES jest uważany za nieprzerwany

Edit:

Seems URL online jest wyłączony & możesz użyć pobranych plików do szyfrowania od podanego linku & umieść odpowiednie pliki w folderze głównym aplikacji tację.

https://code.google.com/archive/p/crypto-js/downloads

lub wykorzystywane do innych CDN jak https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/components/aes-min.js

98

var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase"); 
 
//U2FsdGVkX18ZUVvShFSES21qHsQEqZXMxQ9zgHy+bu0= 
 

 
var decrypted = CryptoJS.AES.decrypt(encrypted, "Secret Passphrase"); 
 
//4d657373616765 
 

 

 
document.getElementById("demo1").innerHTML = encrypted; 
 
document.getElementById("demo2").innerHTML = decrypted; 
 
document.getElementById("demo3").innerHTML = decrypted.toString(CryptoJS.enc.Utf8);
Full working sample actually is: 
 

 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/aes.js"></script> 
 

 
<br><br> 
 
<label>encrypted</label> 
 
<div id="demo1"></div> 
 
<br> 
 

 
<label>decrypted</label> 
 
<div id="demo2"></div> 
 

 
<br> 
 
<label>Actual Message</label> 
 
<div id="demo3"></div>

+0

Dzięki Tomas. Czy wiesz, że szyfrowane żądło gwarantuje zgodność z JavaScript? – mark1234

+3

Szyfrowanie jest w rzeczywistości obiektem, ale można wywołać metodę encrypted.toString(), aby uzyskać ciąg znaków.Będziesz w stanie odszyfrować ten ciąg później: http://jsbin.com/kofiqokoku/1/ –

+3

Ale jak możemy zabezpieczyć tajne hasło? – duykhoa