2012-04-13 193 views

回答

6

该API用于创建签名和SHA1哈希(如您在链接到的代码中所见)。其目的不是可逆的(未签名),而是用作验证真实性。

例如,如果您已经签署了身份验证令牌,则可以通过检查Crypto.sign(token) == tokenSignature来确保它没有被篡改。

如果您想加密和解密,请查看Crypto.encryptAES/Crypto.decryptAES(在Play 2.1中添加)。

+1

它的好处是什么,我们还可以通过'myString = password'检查 – 2014-05-14 14:53:50

+0

好点。我编辑了答案以显示更好的示例。 – 2014-12-17 16:25:41

+1

请注意,Crypto.encryptAES容易受到可塑性攻击,除非它与MAC进行身份验证相结合,因为它使用AES-CTR。你可能想要的是AES-GCM。 'Crypto'将在2.5.x中弃用,并且有一个迁移指南,可以将其移除:https://www.playframework.com/documentation/2.5.x/CryptoMigration25 – 2016-02-29 10:54:41

1

你究竟想要做什么?您只需签署一个值以确保它不会被更改。关键是你不能轻易“放弃”它。

如果要在应用程序中加密和解密值,则必须使用javax.crypto的加密算法。

+0

感谢您的时间,我想解密的用户名和密码,在玩游戏! 1.2.4我已经使用了Crypto类。然后在请求时我想显示用户名和密码,所以我需要再次解密它。但我明白,我需要使用额外的类为此目的... – adis 2012-04-15 09:09:08

1

如果您需要加密/解密功能,您可以尝试添加http://www.jasypt.org/

org.jasypt.util.text.BasicTextEncryptor允许用户使用正常强度算法对文本数据进行加密和解密。为了能够加密和解密。

比你可以做这样的事情:

... 
BasicTextEncryptor textEncryptor = new BasicTextEncryptor(); 
textEncryptor.setPassword(myEncryptionPassword); 
... 
String myEncryptedText = textEncryptor.encrypt(myText); 
String plainText = textEncryptor.decrypt(myEncryptedText); 
... 
+0

是的,的确,我碰到过这个:-)。我会尝试在我的项目中使用它,谢谢分享。 – adis 2012-04-18 12:40:25

+0

我不会使用jasypt,因为它发明了自己的加密:http://security.stackexchange.com/a/65240 – 2016-02-29 10:55:59