JPBC库(基于配对的密码学)入门和避坑指南
视频地址:https://www.bilibili.com/video/BV1o5411Y77r/
1. JPBC简介
Java Pairing-Based Cryptography Library
对PBC库(C语言)的Java封装
常用于基于配对的密码学算法仿真(身份基加密、属性基加密等)
2. JPBC环境
JPBC: http://gas.dia.unisa.it/projects/jpbc/download.html
JDK: https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
IntelliJ IDEA: https://www.jetbrains.com/idea/download/#section=windows
Eclipse: https://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/2020-06/R/eclipse-java-2020-06-R-win32-x86_64.zip
3. JPBC使用
3.1 基本使用
- 创建项目,添加jar包依赖
- 引用库 (import,部分IDE支持自动导入)
- 生成Ppairing实例(从文件导入或者自选参数生成)
- 验证双线性 e(ga,gb)=e(g,g)abe(g^a,g^b) = e(g,g)^{ab}e(ga,gb)=e(g,g)ab
测试代码
// 一、基于特定椭圆曲线类型生成Pairing实例// 1.从文件导入椭圆曲线参数Pairing bp = PairingFactory.getPairing("a.properties");// 2.自定义曲线参数// int rBits = 160;// int qBits = 512;// TypeACurveGenerator pg = new TypeACurveGenerator(rBits, qBits);// PairingParameters pp = pg.generate();// Pairing bp = PairingFactory.getPairing(pp);// 二、选择群上的元素Field G1 = bp.getG1();Field Zr = bp.getZr();Element g = G1.newRandomElement().getImmutable();Element a = Zr.newRandomElement().getImmutable();Element b = Zr.newRandomElement().getImmutable();// 三、计算等式左半部分Element ga = g.powZn(a);Element gb = g.powZn(b);Element egg_ab = bp.pairing(ga,gb);// 四、计算等式右半部分Element egg = bp.pairing(g,g).getImmutable();Element ab = a.mul(b);Element egg_ab_p = egg.powZn(ab);if (egg_ab.isEqual(egg_ab_p)) {System.out.println("yes");}else {System.out.println("No");}
3.2 避坑指南(重要)
getImmutable() 和 duplicate()
典型错误示例
Pairing pairing = PairingFactory.getPairing("a.properties");Element g = pairing.getG1().newRandomElement();Element a = pairing.getZr().newRandomElement();System.out.println("g: " + g);Element ga = g.powZn(a); //the value "g" will also be changed to gaSystem.out.println("g: " + g);System.out.println("ga: " + ga);
避免方法
- 定义g的时候使用 getImmutable() 方法
Element g = pairing.getG1().newRandomElement().getImmutable();
- 或者使用g的时候使用 duplicate() 方法
Element ga = g.duplicate().powZn(a);
JPBC库(基于配对的密码学)入门和避坑指南相关推荐
- 蓝牙BLE(BlueTooth BLE)入门及爬坑指南
前言 最近比较忙,两三周没有更新简书了,公司正好在做蓝牙BLE的项目,本来觉得挺简单的东西从网上找了个框架,就咔咔地开始搞,搞完以后才发现里面还有不少坑呢,故而写一篇蓝牙BLE入门及爬坑指南,旨在帮助 ...
- HarmonyOS实战 —基于hi3861芯片鸿蒙2.0的避坑指南
HarmonyOS实战 -基于hi3861芯片鸿蒙2.0的避坑指南 特别说明:本文章与卡片开发无关,想看卡片开发的不用往下读了 最近学习鸿蒙设备开发的过程中遇到了很多问题,因为目前几乎所有设备开发教程 ...
- 虚拟服务器windows硬盘30t,避坑指南:基于Windows系统的NAS通过NFS将硬盘空间共享给Hyper-V黑群晖...
避坑指南:基于Windows系统的NAS通过NFS将硬盘空间共享给Hyper-V黑群晖 2019-07-08 07:30:00 64点赞 601收藏 91评论 方案选择 首先感谢矿难,性价比超高的蜗牛 ...
- jeecg-boot 入门-小白避坑篇
目录 一.jeecg-boot 入门 二.jeecg-boot 框架知识点 2.0 jeecg-boot 主题色修改 2.1 jeecg数据库表-字段规范 2.2 j-dict-select-tag ...
- 我的GO+语言初体验-Go+入门安装避坑手册
一.入门简介 英文介绍 For engineering: working in the simplest language that can be mastered by children. For ...
- STM32F407 DP83848驱动调试过程总结(标准库到HAL库移植避坑指南)
文章目录 移植到正点原子例程 下载ST最新F4平台例程适配 使用CubeMX从头开始 移植标准库上层函数到CubeMX初始化的HAL库 项目要从之前的STM32F107平台移植到STM32F407平台 ...
- Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法
文章目录 一.项目场景 二.基本模块原理与调试方法分析--信源部分: 三.信号处理部分和显示部分: 四.基本的通信链路搭建: 四.特殊模块:interpreted MATLAB function: 五 ...
- 基于xdocreport导出复杂word文档,专业避坑指南
如果你要先问我为什么要导出word?那么请你走开,你个杠精! 在完成这个功能时花费了大量的时间查阅资料,发现能满足导出复杂word文档的工具只有xdocreport,如果有其他的工具欢迎分享.废话不多 ...
- 〖Python零基础入门篇㊸〗- 异常处理的避坑指南
万叶集
最新文章
- SQL SERVER的锁机制(三)——概述(锁与事务隔离级别)
- 程序员,不要急于学习编程语言,先学会如何解决问题
- 跳出数据计算拯救人智能
- OpenMP入门教程(一)hello world
- Vue中Web组态实现方案-WebTopo的使用
- 小赋诗歌一首,以感学生时代结束
- python str translate,str.translate() --文本过滤和处理
- hpsocket java代码_HPSocket介绍与使用
- VR为难民发声,传递人道主义精神
- python判断、创建文件夹
- JavaScript符号基础
- 顶尖,何为顶尖?你知道吗?我知道..
- [UE4] Spawn Emitter Attached 特效消失的问题的解决方法:ParticleSystem 必须附着在角色的 Mesh 上
- 树莓派python蓝牙_在树莓派3B上做蓝牙音频
- Office软件Android无法登录,office mobile(安卓版)无法使用
- 用户输入一个字符串,请将字符串中的所有字母全部向后移动移动一位,最后一个字母放到字符串的开头,最后将新的字符串输出。
- 《网络安全应急响应技术实战指南》知识点总结(第10章 流量劫持网络安全应急响应)
- Python写银行系统
- mysql创建用户只能访问数据库中一张表
- 未来的趋势—电子签约流行