【问题标题】:Decrypt String with Crypto用 Crypto 解密字符串
【发布时间】:2014-12-18 00:25:13
【问题描述】:

Play Framework 2.0 提供了 Crypto 库,见代码:https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/libs/Crypto.scala

所以如果想签署一个我可以使用的值:

Crypto.sign(username);

但是如何再次解密用户名?没有unsigndecrypt方法吗?还是我在这里遗漏了什么?

【问题讨论】:

    标签: playframework-2.0


    【解决方案1】:

    API 用于创建签名,即 SHA1 哈希(您可以在链接到的代码中看到)。这样做的目的不是可逆的(未签名),而是用作验证真实性。

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

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

    【讨论】:

    • 它有什么好处,我们也可以通过myString=password查看
    • 请注意,Crypto.encryptAES 很容易受到延展性攻击,除非它与 MAC 结合进行身份验证,因为它使用 AES-CTR。您可能想要的是 AES-GCM。 Crypto 将在 2.5.x 中被弃用,并且有一个迁移指南用于移除它:playframework.com/documentation/2.5.x/CryptoMigration25
    【解决方案2】:

    你到底想做什么?您只需签署一个值以确保它没有被更改。关键是你不能轻易“取消签名”。

    如果你想在你的应用中加密和解密一个值,你必须使用来自javax.crypto的加密算法。

    【讨论】:

    • 感谢您的宝贵时间,我想解密用户名和密码,并在 Play 中! 1.2.4 我为此使用了 Crypto 类。然后在请求时我想显示用户名和密码,所以我需要再次解密。但我知道我需要为此目的使用其他类...
    【解决方案3】:

    如果您需要加密/解密功能,可以尝试添加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);
    ... 
    

    【讨论】:

    • 是的,我确实遇到了这个 :-)。我会尝试在我的项目中使用它,谢谢分享。
    • 我不会使用 jasypt,因为它发明了自己的加密:security.stackexchange.com/a/65240
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2019-01-31
    相关资源
    最近更新 更多