代码之家  ›  专栏  ›  技术社区  ›  krosenvold

在url参数中添加一个简单的mac?

  •  1
  • krosenvold  · 技术社区  · 16 年前

    我想在我的一些URL参数中添加一种简单的mac。这是 只有 作为针对应用程序错误和缓存相关问题/错误的额外防御线,而不是作为应用程序中实际登录安全性的任何形式的替换。给定的业务对象ID已经由后端保护,仅限于单个用户。

    所以基本上我想在我的URL参数中添加一个2-4个字符大小的简短身份验证代码。我想我想要一个沿着F(业务数据ID+登录用户ID+)的可逆函数。?)=散列,但我愿意接受建议。

    主要目的是停止ID猜测,并确保每个登录用户的URL都是相当不同的。我也是 不要 想要一些大而笨重的东西,比如MD5。

    3 回复  |  直到 16 年前
        1
  •  2
  •   erickson    16 年前

    由于您不想寻找加密质量,也许24位CRC可以满足您的需要。虽然MD5在绝对值上是“快速的”,但CRC相对而言是“盲目的快速”。然后,3字节的CRC可以用base-64编码将文本编码为4个字符。

    这里是用于OpenPGP ASCII装甲校验和的检查的Java实现:

    private static byte[] crc(byte[] data)
    {
      int crc = 0xB704CE;
      for (int octets = 0; octets < data.length; ++octets) {
        crc ^= (data[octets] & 0xFF) << 16;
        for (int i = 0; i < 8; ++i) {
          crc <<= 1;
          if ((crc & 0x1000000) != 0)
            crc ^= 0x1864CFB;
        }
      }
      byte[] b = new byte[3];
      for (int shift = 16, idx = 0; shift >= 0; shift -= 8) {
        b[idx++] = (byte) (crc >>> shift);
      }
      return b;
    }
    

    我将散列一个秘密密钥(只有服务器知道),以及您想要保护的任何东西,可能是对象标识符和用户标识符的组合。

        2
  •  1
  •   Anders Öhrt    16 年前

    如果你想要的基本上是MD5,但更小,为什么不只是使用MD5,而是最后4个字符?这不会给你的URL添加一个大的blob,它总是4个十六进制数字。

        3
  •  0
  •   David Webb    16 年前

    一个快速的问题,我确信有一个很好的答案,但是为什么不把这些信息存储在cookie中呢?

    然后你可以使用一些大而笨重的东西,比如MD5,你的网址仍然很漂亮。