有没有什么好的办法能把字符串,转换成唯一数字?

我需要知道如何能将下面的字符串转换成数字,有什么办法能实现这个?
下面我会列三组内容给大家作为尝试,希望大家帮忙提供一下具体的实现方式和逻辑。
字符串:228660261,6922,1001568,33,6,354,2022-10-20,15:00-15:30
转换后数字:5114218495424546770
字符串:210027390,6922,1001568,9,5,314,2022-10-19,10:00-10:30
转换后数字:8950638048021313960
字符串:210030754,6922,1001568,10,5,314,2022-10-19,10:00-10:30
转换后数字:3255733186603065445

我是通过ASII来解决的,期中用了MD5加密使其格式为数字和字母,如下:


```python
from hashlib import md5
def input_num(data):
    a=md5()
    b=data.encode()
    a.update(b)
    result=a.hexdigest()
    list_1=[]
    for i in result:
        if i.isdigit():
            list_1.append(i)
        list_1.append(str(ord(i)))

    result_num=''.join(list_1)
    print(result_num)
data='228660261,6922,1001568,33,6,354,2022-10-20,15:00-15:30;1666225243265'
input_num(data)

```

看不出来,参数太多了,根本没法猜测,这种加密的除了加密者,其他人猜测不了,现在大概就能看出来最后一个数据是时间戳截取了13位,这也符合加密的常用参数,时间戳最常用…

可以用 字符串 Hash
虽然不能保证唯一,但碰撞的概率非常小(大概在 264 次方左右,既2e20),可以满足使用的需要

img

#include <iostream>
#include <string>
using namespace std;
typedef unsigned long long ULL;

#define HASH_K 13331
ULL Hash(string str)
{
    ULL ret = 0;
    for(char& c : str)
        ret = ret * HASH_K + int(c);
    return ret;
}

string str;
int main()
{
    while(getline(cin, str))
        cout << Hash(str) << endl;
}
  1. 既然是唯一解,应该思考一下加密后能否逆转
  2. 加密是否加盐,盐是怎么定义的
  3. 如果你只是想找一个“工具”加密自己的数据,没必要一直用这个,上网找有很多

img