Я пытаюсь зашифровать пароль, отправленный клиентской стороной, с помощью Javascript's CryptoJS и расшифровать его на стороне сервера с использованием класса Cipher Java.Защита паролем AES с использованием CryptoJS на клиенте и шифрования Java на сервере
На стороне клиента:
<html>
<body>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/aes.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1/build/components/pad-nopadding.js"></script>
<script>
var iv = CryptoJS.enc.Hex.parse('101112131415161718191a1b1c1d1e1f');
var encrypted = CryptoJS.AES.encrypt("A Sample Message", "SecretPassphrase", { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.NoPadding, iv: iv });
console.log("iv: " + encrypted.iv.toString(CryptoJS.enc.Hex));
console.log("ct: " + encrypted.ciphertext.toString(CryptoJS.enc.Hex));
</script>
</body>
</html>
Выход я получаю на Firebug является
iv: a43e384b24e275c29a8a68bc031fd79e
ct: c86b6ca4ef30fadfea28821e04aa8dad
На стороне сервера:
import java.nio.charset.Charset;
import java.security.*;
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.*;
public class AES {
public static String decrypt(String encryptedData) throws Exception {
byte[] keyBytes = "SecretPassphrase".getBytes();
Key key = new SecretKeySpec(keyBytes, "AES");
Cipher c = Cipher.getInstance(ALGO);
byte[] iv = (byte[]) new Hex().decode("a43e384b24e275c29a8a68bc031fd79e");
IvParameterSpec ivspec = new IvParameterSpec(iv);
c.init(Cipher.DECRYPT_MODE, key, ivspec);
byte[] decordedValue = (byte[]) new Hex().decode(encryptedData);
byte[] decValue = c.doFinal(decordedValue);
String decryptedValue = Hex.encodeHexString(decValue);
return decryptedValue;
}
public static void main(String[] args) throws Exception {
String result = AES.decrypt("c86b6ca4ef30fadfea28821e04aa8dad");
System.out.println(hexToString(result));
}
}
мне нужна помощь о том, что я я делаю неправильно и почему я получаю случайно iv
на моем clien t, когда я ограничиваю его использование прошедшего iv.
_Do не шифровать пароли_. Вам необходимо ** хэш ** пароли, используя bcrypt или scrypt или PBKDFv2. – SLaks
Кроме того, криптография на стороне клиента не добавит никакой безопасности в большинстве случаев. В частности, от необходимости SSL не избежать. – SLaks
На самом деле мне нужен открытый текст пароля для соответствия моей базе данных. –