marekweb / opaque-id

此包最新版本(dev-master)没有可用的许可证信息。

不透明ID:整数ID的混淆方案

dev-master 2017-06-06 15:52 UTC

This package is not auto-updated.

Last update: 2024-09-24 08:35:38 UTC


README

不透明ID使用基于密钥的可逆方案来混淆整数。

它旨在在包含在公共URL或API响应中时隐藏资源/数据库ID,无需使用代理数据库键。

不透明ID看起来是这样的

      ID    Opaque Hex  Opaque Base64
       0     7ea0aa7a      fqCqeg
       1     0ae54fa3      CuVPow
       2     cbae9d6c      y66dbA
       3     db2ac148      2yrBSA

该算法是一对一的整数映射(包含一个密钥)。它轻量级且紧凑,但牺牲了实际的加密安全性。对于真正的加密,请使用严肃的加密算法(尽管你不会得到如此紧凑的密文)。

用法

以下是使用不透明ID的示例(Python示例)

# Create an instance with your secret key (pick your own key!)
encoder = opaque.OpaqueEncoder(0x3b79db9a) 

print encoder.encode_hex(3)
# -> db2ac148

print encoder.encode_base64(3)
# -> 2yrBSA

print encoder.decode_base64("2yrBSA")
# -> 3

以下是一个PHP示例

$encoder = new OpaqueEncoder(0x3b79db9a);
print $encoder->encode($id); // Default mode is hex

$encoder = new OpaqueEncoder(0x3b79db9a, OpaqueEncoder::ENCODING_BASE64);
print $encoder->encode($id); // Will use base64 mode

使用composer安装类

composer require marekweb/opaque-id

然后使用以下方式引入

require 'vendor/autoload.php';
$encoder = new OpaqueEncoder(0x3b79db9a);

实现

  • PHP: OpaqueEncoder.php
  • Python: opaque.py 模块

作者

(c) 2011 Marek Z. @marekweb