【问题标题】:java encrypting numeric values to alphanumeric valuesjava将数值加密为字母数字值
【发布时间】:2014-04-17 19:35:27
【问题描述】:

我想加密数值。

例如;

该值为数字。

String ="8502352664";

我想将它加密为字母数字+数字。但是我只需要 5 个字符的输出。

8502352664>AB123

AB123 是一个输出示例。

谁能给我任何加密的例子吗?

谢谢。

【问题讨论】:

  • 你能澄清你的问题吗?什么例子?
  • 没有碰撞就无法做到!如果您想以 AB123 之类的格式显示十位数字。
  • 请这样想。我有一个客户 ID。它是 8502352664。我想通过浏览器链接(获取参数)使用它。但是我不希望任何人看到它这样。所以我想加密它。还有一些人必须将此 id 用作 5char(AB123)。有可能吗?
  • 将其转换为十六进制。使用Integer.toHexString(8502352664)。然而,它没有保证在 5 个字符内返回它......
  • 假设您的 id 有 10 个符号,您将需要一个包含 100 个不同符号的字母表才能实现您想要的。 SymbolsCount = exp(ln(10^x-1)/5) 其中x 是十进制形式的 id 的最大长度。

标签: java encryption hash hash-function


【解决方案1】:

我能想到这样的事情。
如果您有一些字符串,您可以将其转换为:11233378 -> B1A2C3A7A8
A 为单人,B 为双人,C 为三人。

或者您可以使用 Caesar Chiffre 来执行此操作,将您的字符串移动值 n。 11233378 -> 22344489.

只是一些想法..

【讨论】:

  • 仍然没有减少到 5 的长度。
【解决方案2】:

大多数现代加密哈希函数不适合 5 * 8 位,因此需要 5 个以上的字符来呈现它们。

如果您愿意在安全性上妥协,尽管您可以使用 Javas hashCode 之类的东西作为 String,然后将其转换为字符。

代码看起来像这样

    public String createHash(String s) throws UnsupportedEncodingException {
    int hashcode = s.hashCode();
    byte[] bytes = BigInteger.valueOf(hashcode).toByteArray();

    return new String(bytes, "UTF-8");
}

【讨论】:

    【解决方案3】:

    这是我在http://www.w3schools.com/tags/ref_urlencode.asp 上找到的符号列表,我选取了其中的前 100 个符号。要将长度为 10(以 10 为底)的字符串转换为其长度的一半,您需要以 100 为底。查看下面的列表,将字符串“8502352664”划分为 |85|02|35|26|64|并将它们替换为左侧的对应项。

    例如,如果我得到203,它将得到我|02|03| --> !"

    space   %20  - #01
    !   %21      - #02
    "   %22      - #03
    #   %23      - #04
    $   %24       - #05
    %   %25      - and so on....
    &   %26
    '   %27
    (   %28
    )   %29
    *   %2A
    +   %2B
    ,   %2C
    -   %2D
    .   %2E
    /   %2F
    0   %30
    1   %31
    2   %32
    3   %33
    4   %34
    5   %35
    6   %36
    7   %37
    8   %38
    9   %39
    :   %3A
    ;   %3B
    <   %3C
    =   %3D
    >   %3E
    ?   %3F
    @   %40
    A   %41
    B   %42
    C   %43
    D   %44
    E   %45
    F   %46
    G   %47
    H   %48
    I   %49
    J   %4A
    K   %4B
    L   %4C
    M   %4D
    N   %4E
    O   %4F
    P   %50
    Q   %51
    R   %52
    S   %53
    T   %54
    U   %55
    V   %56
    W   %57
    X   %58
    Y   %59
    Z   %5A
    [   %5B
    \   %5C
    ]   %5D
    ^   %5E
    _   %5F
    `   %60
    a   %61
    b   %62
    c   %63
    d   %64
    e   %65
    f   %66
    g   %67
    h   %68
    i   %69
    j   %6A
    k   %6B
    l   %6C
    m   %6D
    n   %6E
    o   %6F
    p   %70
    q   %71
    r   %72
    s   %73
    t   %74
    u   %75
    v   %76
    w   %77
    x   %78
    y   %79
    z   %7A
    {   %7B
    |   %7C
    }   %7D
    ~   %7E
        %7F
    `   %80
       %81
    ‚   %82
    ƒ   %83    - #100
    

    还要注意 %7F 和 %81,它们都是空字符,我不确定它们是否被同等对待,但为了安全起见,您可以选择任何您喜欢的不在此列表中的符号并替换他们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 2018-09-30
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多