我想根据gae docs向客户端传递一个查询游标(一个大约120长度的Web安全字符串):
警告:将数据存储区光标传递给客户端时要小心 就像在网络表格中一样。虽然客户端无法更改游标值 要访问原始查询之外的结果,它是可能的 解码光标以暴露有关结果实体的信息,例如 作为应用程序ID,实体种类,密钥名称或数字ID,祖先 密钥和查询的过滤器和排序顺序中使用的属性。如果 您不希望用户有权访问该信息,您可以 加密光标,或存储它并为用户提供不透明 键。
实现这一目标的好方法是什么?我希望低cpu成本不是那么强大的密码/加密算法,它将加密字符串保持为Web安全字符串。
答案 0 :(得分:2)
“存储它并向用户提供不透明的密钥。”
我只是存储它并给客户端一个密钥。
如果你对它是一个临时的事情感到满意,你可以把它放在memcache中来节省金钱/时间。
答案 1 :(得分:2)
要稍微简化答案,将光标存储在数据存储区中并将不透明的密钥传递给 ,这是一个很好的方法。但是,这种方法需要支付更多的数据存储操作。
替代方法是对游标进行加密/解密,也不是免费的。您将需要实例时间来加密和解密密钥。
如果您需要对称密钥加密,则默认选择为AES。它快速且被广泛接受为安全的。 javax.crypto
库已在App Engine上列入白名单,因此您可以使用它们。这是一个应该做你想做的快速片段:
String password = "some value";
byte[] passwordBytes = password.getBytes();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(passwordBytes, "AES"));
byte[] encryptedBytes = cipher.doFinal(cursor.toWebSafeString().getBytes());
哪种方法更便宜取决于很多事情,你必须自己做分析。除了加密或数据存储之外,使用memcache可能会使事情变得更便宜。