对称保序加密方案的实现

pyope的Python项目详细描述


PyPi versionTravis build

这是boldyreva对称order-preserving encryption方案(Boldyreva’s paper)的实现。

支持的python版本:2.7和3.4+

disclaimer 1这是一个实验性的实现,在用于生产和/或敏感应用程序之前,应该对其进行彻底的检查和评估。

disclaimer 2boldyreva方案不是标准算法,因此没有测试向量和固定的明文密文 给定密钥的映射。这意味着,一般来说,由包的两个不同版本使用相同密钥加密的明文可能不相等。

快速示例

快速入门

frompyope.opeimportOPErandom_key=OPE.generate_key()cipher=OPE(random_key)assertcipher.encrypt(1000)<cipher.encrypt(2000)<cipher.encrypt(3000)assertcipher.decrypt(cipher.encrypt(1337))==1337

可以指定输入和输出范围。否则,使用默认输入(0..2^15-1)和输出(0..2^31-1)范围。

frompyope.opeimportOPE,ValueRangecipher=OPE(b'long key'*2,in_range=ValueRange(-100,100),out_range=ValueRange(0,9999))assert0<cipher.encrypt(10)<cipher.encrypt(42)<9999

关于保序加密

保序加密(ope)允许比较密文值以了解相应的关系 在潜在的明文之间。根据定义,保序加密方法比 传统的加密算法对于相同的数据量,因为前者泄露了明文的排序信息 价值观。

Ope如何有用?例如,有些系统可能需要ope来执行一组特定的查询(例如range sql 查询)加密数据。这些系统包括CryptDBMonomi等等。

安全性

如上所述,boldyreva方案的安全保证比确定性加密方案的安全保证弱, 但是,如果加密密钥足够长,安全性仍然可以提高。建议使用随机生成的密钥 至少256位长。

运行测试

pytest用作测试框架。运行所有测试:

$ py.test tests/

待办事项

  • 更多测试
  • 优化性能
  • 安全保证?

历史

0.1.0(2017-01-01)

  • 使用“加密”而不是“pycrypto”

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
解释java选择方法   连接到127.0.0.1的java间歇性故障,连接到IP(eth0)时没有故障   java如何优雅地杀死hadoop作业/intercept`hadoop作业杀死`   java如何通过引导类加载器以编程方式加载另一个类?   url Java:在查询参数之前使用片段构建URI   在BroadLeaf表blc_order_属性中保存OrderAttributes值时发生java错误   安卓将功能从xml转换为java   java如何将数据写入文件?   java JPA SQL结果映射   Java中整数对象比较运算符的引用安全性   Spring测试失败:java。lang.NoClassDefFoundError:org/springframework/cglib/transform/impl/memorysafuendecaredthrowableStrategy   rich:extendedDataTable中的java行选择和数据处理   java为什么我需要在volatile上对多个线程使用synchronized?   java尽管构建成功,但为什么会出现此错误?   数组$ArrayList不能转换为java。util。java中的ArrayList   java如何根据泛型类型调用方法?   java将JLabel添加到JPanel,将JPanel添加到JFrame   如果MapStruct中的源为null,则java将父目标设置为null   JavaJBossDrools从DRL插入事实   java不同的JRE安装(windows)