首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中将AWS认知用户ID编码为有效的ObjectId并将其解码回

在python中将AWS认知用户ID编码为有效的ObjectId并将其解码回
EN

Stack Overflow用户
提问于 2019-07-06 13:14:27
回答 1查看 256关注 0票数 1

我想将AWS认知用户id编码成一个有效的ObjectId,它可以在MongoDB中作为文档id使用,这样每个用户的文档都可以被用户的用户ID识别。

有效的ObjectId必须是12字节的输入或24字符的十六进制字符串。

下面是一个AWS认知用户ID (Str)示例:

B5bb610b-de5a-480 e-9363-84905ae33d23

我试着把认知用户id转换成字节,也把它转换成十六进制,但是它不能满足需求。这是代码

代码语言:javascript
复制
import bson
u = "b5bb610b-de5a-480e-9363-84905ae33d23"
bson.ObjectId(u.encode("utf-8"))
bson.ObjectId(u.encode("utf-8").hex())

如果使用sha224,如下所示,

代码语言:javascript
复制
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))

它们都抛出了提到上述要求的错误。

使用十六进制字符串进行编码,

代码语言:javascript
复制
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

代码语言:javascript
复制
cognito_prefix = str(mongo_id)[:6]

在这种情况下,我需要从mongo对象Id派生的整个认知ID。

我需要将认知用户id编码成一个有效的对象Id,这个Id可以存储在mongoDB中,并将其解码回来。

请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-06 18:11:59

使用hashlib计算认知ID的sha224。将前12个字节作为唯一的文档ID输入Mongo。

这种方法的缺点将是联接的排序顺序变得随机化,并且您只能在获取Mongo文档之后才能了解原始的认知ID。为了弥补你可能选择的3/9分裂。使用示例ID,可以逐字复制三个字节0xb50xb0x61作为文档ID的前缀,然后追加sha224结果的初始九个字节以进行惟一化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56914422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档