数据库Id加密

Encryption of Database Id

我正在开发一项 RESTful 服务,其中数据库中特定 table 的 ID 需要返回给客户端,以便将来访问数据库中的特定条目。有人建议我不要使用自动递增并直接返回 id,因此我改为通过以下方式加密和发送 Id -

SET @secretKey1 = "some key";
SET @secretKey2 = CONCAT("some other key", AccountNo);
SET @encryptedAccountNo = TO_BASE64(AES_ENCRYPT(AccountNo, @secretKey1));
SET @encryptedId = TO_BASE64(AES_ENCRYPT(Id, @secretKey));
RETURN CONCAT(@encryptedAccountNo, @encryptedId);

(注意:帐号是一个足够随机的字段,不会暴露给客户端)

使用UUID作为主键会不会更合适?如果是这样,使用 UUID 是否足够,还是也应该加密?

或者您会完全使用其他设计吗?

此外,对于改进现有设计的安全性或性能方面,您有什么建议吗?

我想你可能误解了那个建议....

当你说 "I was advised against using auto increment and returning the id directly".

在使用服务器端之前,您当然应该始终检查 Id 是否正确;

(即检查具有该 ID 的文档是否属于尝试编辑它的用户),

但是加密 ID 本身确实没有任何用处,因为您的 API 将不得不处理加密的 ID(除非您是 encrypt/decrypt 客户端,这对安全没有任何作用),所以(恶意)客户端可以只发送加密版本并获得完全相同的结果...

我们无法通过查看您的一小部分数据库逻辑来评论您代码的安全性。如果您想进行适当的审查,您将必须 post 实际进行交互的代码...