0

KeyFactory.keyToString 字符串表示看起来已经加密

例子:

...
    Key  key  = KeyFactory.stringToKey("ag1zYW50b21lcmNhZG9zcgoLEgRUcmVlGAEM");

        try {
           Entity entity = datastoreService.get(key);
        } catch (EntityNotFoundException e) {
           map.addAttribute("EntityNotFoundException",       e.getMessage());
           map.addAttribute("status",                        false);
        }
...

private ModelMap organizeData(Entity entity){

   Map     properties   =              entity.getProperties();
   Key     key          =              entity.getKey();
   String  key_string   =              KeyFactory.keyToString(key);

   ModelMap data = new ModelMap();

   data.addAttribute("properties",     properties);
   data.addAttribute("keyString",      key_string);

   return data;
}


public ArrayList<ModelMap> getTree() {
   ArrayList<ModelMap> treeLists = new ArrayList<ModelMap>();

   Query query = new Query("Tree");

   query.addSort("left", Query.SortDirection.ASCENDING);

   for(Entity entity:datastoreService.prepare(query).asIterable()){

      // Todo -> Organize Data as ModelMap Obj
      ModelMap model = organizeData(entity);

      treeLists.add(model);

   }

   return treeLists;
}

我问因为在

https://developers.google.com/appengine/docs/java/datastore/entities

键的字符串表示是“网络安全的”:它不包含在 HTML 或 URL 中被视为特殊的字符。

注意:KeyFactory.keyToString 方法与 Key.toString 不同,后者返回适合在调试和日志记录中使用的人类可读字符串。如果您需要一个可以转换为可用键的字符串值,请使用 KeyFactory.keyToString。

另请注意,密钥的字符串表示形式未加密:用户可以解码密钥字符串以提取其组件,包括实体及其祖先的种类和标识符。如果向用户隐藏此信息很重要,您必须自己加密密钥字符串,然后再将其发送给用户。

他们指的是 Key.toString?

因为我将这个 JSON 发送给客户端布局

[
   {
      "properties":{
         "parent":null,
         "left":1,
         "right":2,
         "name":"laptops"
      },
      "keyString":"ag1zYW50b21lcmNhZG9zcgoLEgRUcmVlGAEM"
   },
   {
      "properties":{
         "parent":null,
         "left":3,
         "right":4,
         "name":"Pc"
      },
      "keyString":"ag1zYW50b21lcmNhZG9zcgoLEgRUcmVlGAIM"
   }
...

使用 keyString 安全吗?

4

1 回答 1

1

它们指的是KeyFactory.keyToString哪些没有加密,只是用 Base64 或类似的 base 编码。他们担心的是,如果您将密钥发送给用户,它可能会带来问题,因为它可用于创建从数据存储中检索数据的请求。

于 2013-07-29T16:48:34.953 回答