JPBC密码学库封装函数

2024-06-15 08:38
文章标签 函数 封装 密码学 jpbc

本文主要是介绍JPBC密码学库封装函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package Util; /*** FileName: Util.Util* Author:   star* Date:     2019/10/24 17:27* Description: 一些公共的处理参数或者返回结果的方法* History:* <author>          <time>          <version>          <desc>* 作者姓名           修改时间           版本号              描述*/import BCPA.roles.BCPA_PKG;
import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Pairing;import java.nio.ByteBuffer;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;/*** 〈一句话功能简述〉<br> * 〈一些公共的处理参数或者返回结果的方法〉** @author star* @create 2019/10/24* @since 1.0.0*/
public class Util {private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();private static Pairing pairing;//从PKG设置pairing方便后续使用public static void setPairing(Pairing pairing) {Util.pairing = pairing;}//16进制的byte[]数组转换为字符串public static String hexBytesToString(byte[] bytes) {char[] hexChars = new char[bytes.length * 2];for (int j = 0; j < bytes.length; j++) {int v = bytes[j] & 0xFF;hexChars[j * 2] = HEX_ARRAY[v >>> 4];hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];}return new String(hexChars);}//16进制的字符串转换为byte[]数组public static byte[] hexStringToBytes(String s) {int len = s.length();byte[] data = new byte[len / 2];for (int i = 0; i < len; i += 2) {data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)+ Character.digit(s.charAt(i+1), 16));}return data;}//G1中获取随机元素,获取1,获取0public static Element getRandomFromG1() {return pairing.getG1().newRandomElement().getImmutable();}public static Element getOneFromG1() {return pairing.getG1().newOneElement().getImmutable();}public static Element getZeroFromG1() {return pairing.getG1().newZeroElement().getImmutable();}//Zp中获取随机元素,获取1,获取0public static Element getRandomFromZp() {return pairing.getZr().newRandomElement().getImmutable();}public static Element getOneFromZp() {return pairing.getZr().newOneElement().getImmutable();}public static Element getZeroFromZp() {return pairing.getZr().newZeroElement().getImmutable();}//H1,H2 : {0, 1}∗ → G1public static Element hashFromStringToG1(String str) {return pairing.getG1().newElement().setFromHash(str.getBytes(), 0, str.length()).getImmutable();}public static Element hashFromBytesToG1(byte[] bytes) {return pairing.getG1().newElement().setFromHash(bytes, 0, bytes.length).getImmutable();}//H : {0, 1}∗ → Zppublic static Element hashFromStringToZp(String str) {return pairing.getZr().newElement().setFromHash(str.getBytes(), 0, str.length()).getImmutable();}public static Element hashFromBytesToZp( byte[] bytes) {return pairing.getZr().newElement().setFromHash(bytes, 0, bytes.length).getImmutable();}//h : G1 → Zppublic static Element hashFromG1ToZp( Element g1_element) {// h(y) : G1 -> Zpbyte[] g1_bytes = g1_element.getImmutable().toCanonicalRepresentation();byte[] zp_bytes = g1_bytes;try {MessageDigest hasher = MessageDigest.getInstance("SHA-512");zp_bytes = hasher.digest(g1_bytes);   //先把G1元素hash成512bits} catch (Exception e) {e.printStackTrace();}//再把hash后的bits映射到ZpElement hash_result = pairing.getZr().newElementFromHash(zp_bytes, 0, zp_bytes.length).getImmutable();return hash_result;}//{0,1}* -> key space of πkey  int空间public static int h1_pai_key(String data) {try {MessageDigest hasher = MessageDigest.getInstance("SHA-256");byte[] result = hasher.digest(data.getBytes());ByteBuffer wrapped = ByteBuffer.wrap(result);return wrapped.getShort();} catch (Exception e) {e.printStackTrace();return -1;}}//伪随机置换 pseudorandom permutation πkey() 用于随机选择哪些块进行抽查public static List<Integer> pseudoPerm(int key, int n, int c) {List<Integer> result = new ArrayList<Integer>(c);if(c < n) {List<Integer> list = new ArrayList<>(n);for(int i = 0; i < n; i ++) {list.add(i);}for(int i = 0; i < key; i ++)java.util.Collections.shuffle(list);for(int i = 0; i < c; i ++) {result.add(list.get(i));}} else {System.out.println(" pseudorandom permutation error!");}return result;}//{0,1}* -> key space of fkey 字符串空间public static String h2_f_key(String data) {try {MessageDigest hasher = MessageDigest.getInstance("SHA-512");byte[] result = hasher.digest(data.getBytes());return result.toString();} catch (Exception e) {e.printStackTrace();return "error";}}//伪随机函数 pseudorandom function fkey():{0,1}* -> Zppublic static Element pseudoFunc(String key, int id) {try {MessageDigest hasher = MessageDigest.getInstance("SHA-512");byte[] hash_bytes = hasher.digest((key + id).getBytes());   //先把G1元素hash成512bitsreturn pairing.getZr().newElementFromHash(hash_bytes, 0, hash_bytes.length).getImmutable();} catch (Exception e) {e.printStackTrace();return pairing.getZr().newRandomElement();}}public static void main(String[] args) throws Exception {BCPA_PKG pkg = new BCPA_PKG();System.out.println(Util.hashFromStringToZp(123+"name"));System.out.println(Util.hashFromStringToZp(123+"name"));System.out.println(Util.hashFromStringToZp(111+"name"));}
}

关于JPBC的密码学实现参考:

https://blog.csdn.net/zhangwenjiezw886/article/details/51006774

https://blog.csdn.net/liuweiran900217/article/details/23414629

https://blog.csdn.net/qifuchenluo/article/details/45100851

http://gas.dia.unisa.it/projects/jpbc/java-docs/api/index.html

这篇关于JPBC密码学库封装函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062962

相关文章

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

Python Excel 通用筛选函数的实现

《PythonExcel通用筛选函数的实现》本文主要介绍了PythonExcel通用筛选函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录案例目的示例数据假定数据来源是字典优化:通用CSV数据处理函数使用说明使用示例注意事项案例目的第一

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C