【问题标题】:Generate and validate random string生成并验证随机字符串
【发布时间】:2017-07-10 11:17:23
【问题描述】:

我需要基于另一个字符串使用 Java 生成一个字符串。但我还需要能够使用原始字符串检查生成的字符串是否有效。问题是我需要一个可以为每个客户生成有效代码以允许他们执行某些操作的 Java 应用程序,因此当他们使用它时,我需要能够验证他们估算的代码对该客户是否有效。

原始字符串可以是作为唯一字段的电子邮件,也可以是 id...此外,生成密钥的相同逻辑需要在 Android 应用程序中完成,这样他们就可以在离线时获取密钥然后在 Java 应用程序中,我需要能够验证该密钥是否有效。

【问题讨论】:

  • 很难理解您要查找的内容,但我认为 MD5 足以胜任这项工作:stackoverflow.com/questions/4846484/md5-hashing-in-android
  • 如果您想为客户提供一个临时令牌,那么该令牌应存储在您的数据库中以链接到该帐户(及其权限),您如何存储令牌取决于您,但是为了使其可读性强,只需使用 Base64 编码即可,无需加密
  • UUID 并将 UUID 和客户 ID 存储在某处

标签: java android random


【解决方案1】:

通过 java.util.Random 生成随机单词并通过 StringBuilder 生成字符总和 并用于检查使用 String.contains

String specialWord = "abcde";

String wordNew = newWordBySpecialWord();//create word
Log.i("wordNew  ", wordNew);

Log.i("checking  ", String.valueOf(checking(wordNew))); //return true
Log.i("checking  ", String.valueOf(checking(wordNew+"gfrf"))); //return false



public String newWordBySpecialWord() {
    char[] chars = specialWord.toCharArray();
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    for (int i = 0; i < 16; i++) {
        char c = chars[random.nextInt(chars.length)];
        sb.append(c);
    }
    return sb.toString();
}

public boolean checking(String word) {
    for (char aChar : word.toCharArray()) {
        if (!specialWord.contains(String.valueOf(aChar))) {
            return false;
        }
    }
    return true;
}

【讨论】:

  • 您再次发布了基本相同的答案 - 但在此期间并没有变得更好。检查时,每个仅包含原始specialWord 字符的单词都会通过。例如 `wordNew+"acba" 是有效的。换句话说,如果原始单词中至少有一个字母,则只需 26 次尝试即可猜测有效标记。此外,无法确定原始单词是什么。所以没有机会知道代码是否“对该客户有效”。
猜你喜欢
  • 2014-02-09
  • 2017-08-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多