【问题标题】:Java: Secure storage for client passwordJava:客户端密码的安全存储
【发布时间】:2018-03-16 21:06:33
【问题描述】:

Java 中是否有任何东西允许将客户端密码存储在安全位置?

我的应用需要在离线模式下运行。它应该允许用户创建内容,将其存储在设备上并防止其他应用程序读取此内容。其他应用可以访问该内容,但它们应该无法解密它。

一个经典的解决方案是使用安全散列函数来散列用户密码并使用结果来加密文件。但是,这涉及到用户每次访问应用程序时都要输入他/她的密码。我想以一种安全的方式保存密码,以保护它免受设备上的其他应用程序的影响。

在 Android 中,这样的解决方案可以通过使用Android Keystore System

在纯 Java 中有类似的东西吗?

【问题讨论】:

    标签: java security passwords password-protection password-encryption


    【解决方案1】:

    您可以使用带有 SHA 的 java.security.MessageDigest 作为您的算法选择。示例

    public class CryptWithMD5 {
    private static MessageDigest md;
    
      public static String 
    cryptWithMD5(String pass){
    try {
        md = MessageDigest.getInstance("MD5");
        byte[] passBytes = pass.getBytes();
        md.reset();
        byte[] digested = md.digest(passBytes);
        StringBuffer sb = new StringBuffer();
        for(int i=0;i<digested.length;i++){
            sb.append(Integer.toHexString(0xff & digested[i]));
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException ex) {
    
    }
        return null;
    }
    

    【讨论】:

    • 您无法解密 MD5,但您可以比较输出,因为如果您在此方法中放入相同的字符串,它将具有相同的加密输出。如果要解密,您需要使用 SHA。您将永远不要对用户密码使用解密。为此,请始终使用 MD5
    • 请注意,SHA 和 MD5 都不足以存储密码并且不安全。 MD5 是不安全的并且通常被破坏(解释这不适合在评论中抱歉,但根本不要使用 MD5,也不要使用 SHA 进行密码散列)。
    猜你喜欢
    • 2015-04-20
    • 2021-07-15
    • 2016-04-22
    • 1970-01-01
    • 2018-04-25
    • 2011-09-22
    • 2012-10-29
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多