我想将AWS认知用户id编码成一个有效的ObjectId,它可以在MongoDB中作为文档id使用,这样每个用户的文档都可以被用户的用户ID识别。
有效的ObjectId必须是12字节的输入或24字符的十六进制字符串。
下面是一个AWS认知用户ID (Str)示例:
B5bb610b-de5a-480 e-9363-84905ae33d23
我试着把认知用户id转换成字节,也把它转换成十六进制,但是它不能满足需求。这是代码
import bson
u = "b5bb610b-de5a-480e-9363-84905ae33d23"
bson.ObjectId(u.encode("utf-8"))
bson.ObjectId(u.encode("utf-8").hex())如果使用sha224,如下所示,
from hashlib import sha224
from bson.objectid import ObjectId
hasher = sha224()
cognito_id = cognito_id.encode("utf-8")
prefix = cognito_id[:6]
hasher.update(cognito_id)
hashed = hasher.digest()
partial_hash = hashed[:9]
mongo_id = prefix+partial_hash
mongo_id = ObjectId(str(mongo_id))它们都抛出了提到上述要求的错误。
使用十六进制字符串进行编码,
from hashlib import sha224
from bson.objectid import ObjectId
hasher = sha224()
cognito_id = cognito_id.encode("utf-8")
prefix = cognito_id.hex()[:6]
hasher.update(cognito_id)
hashed = hasher.hexdigest()[:18]
mongo_id = prefix + hashed
mongo_id = ObjectId(mongo_id)但我不能把它解码回去。我只能得到前6个字符的认知Id
cognito_prefix = str(mongo_id)[:6]在这种情况下,我需要从mongo对象Id派生的整个认知ID。
我需要将认知用户id编码成一个有效的对象Id,这个Id可以存储在mongoDB中,并将其解码回来。
请帮帮忙。
发布于 2019-07-06 18:11:59
使用hashlib计算认知ID的sha224。将前12个字节作为唯一的文档ID输入Mongo。
这种方法的缺点将是联接的排序顺序变得随机化,并且您只能在获取Mongo文档之后才能了解原始的认知ID。为了弥补你可能选择的3/9分裂。使用示例ID,可以逐字复制三个字节0xb50xb0x61作为文档ID的前缀,然后追加sha224结果的初始九个字节以进行惟一化。
https://stackoverflow.com/questions/56914422
复制相似问题