【问题标题】:Is it possible to limit the length of sh1 token to less than 10?是否可以将 sh1 令牌的长度限制为小于 10?
【发布时间】:2017-12-05 04:18:41
【问题描述】:

如何将 sh1 哈希的长度减少到 10 位以下?有可能吗?

我已尝试使用以下代码

 /**
 * 
 * @param id
 * @return
 */
public static final String getGeneratedId(final String id) {

    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(id);
        oos.close();
        MessageDigest m = MessageDigest.getInstance("SHA1");
        m.update(baos.toByteArray());
        return new BigInteger(1, m.digest()).toString(16);
    } catch (Exception e) {
        ICAMPPLogger.logException(CLASSNAME, "error in creating uuid" + e);
        ICAMPPUtils.getStackTraceToString(e);
        return BigInteger.ZERO.toString();
    }
}
public static void main(String[] args) {
    String token = getGeneratedId("testing");
    System.out.println(token);
}
ouput is : 1305340859400297508806692338645894167742475232778
But i would like to limit length to less than 10 . is it posssible

【问题讨论】:

  • getGeneratedId("foobar").substring(0, 10) -- 非常简单。当然,这样做会增加碰撞的机会。
  • 当您不创建UUID 时,谈论UUID 也是一种误导。
  • 而且您不应该使用 Java 序列化将字符串转换为字节数组。只需使用 string.getBytes(StandardCharsets.UTF8)。
  • @Erwin Bolwidt:子字符串.. 非常错误的事情。那么我怎样才能重新获得我从那个令牌中给出的字符串。这不是我的意思
  • @PRASANTHMV 根据定义,加密哈希不允许从哈希中取回原始文本。这就是哈希的全部原理。无论您是否采用它的子字符串都不会改变任何东西。

标签: java


【解决方案1】:

SHA1 产生 160 位数据,即 20 字节。如果将其表示为 HEX,则需要 40 个字符。

这一切都在编码中。您可能会找到一些需要少于 40 个字符的编码。

检查这个:What is the most efficient binary to text encoding?

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2020-05-20
    • 2017-07-21
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多