如何在Linux(Ubuntu 22)服务器上运行jpbc库

本文详细描述了如何在华为云的云服务器上设置环境,包括领取免费服务、安装必要的软件(如XShell7和JDK),以及下载和管理JPBC库和opencsv.jar。还介绍了如何使用BLS01库进行加密和签名操作,以及使用OpenCSV处理数据。
摘要由CSDN通过智能技术生成

准备工作

  1. 一台云服务器,可以使用华为云,可以免费领取一个月使用(本人已经领取了两次),领取的时候系统选择Ubuntu 22
  2. 本地需要准备的软件:XShell 7、Xftp
  3. 下载jpbc库所需的jar包

云服务器中操作

  1. 已经领取或者购买的服务器,复制公网IP在这里插入图片描述
  2. 打开XShell 7,连接云服务器
    • 新建
      在这里插入图片描述
    • 主机名填写刚刚复制的公网IP地址,名称随便写,点击连接
      在这里插入图片描述
    • 弹出以下对话框,输入登录的用户名root,记住用户名,点击确定
      在这里插入图片描述
    • 弹出输入密码的对话框,输入领取云服务器时设置的密码,忘记了可以到官网控制台重置,记住密码,点击确定
      在这里插入图片描述
    • 终端显示以下内容说明连接成功
      在这里插入图片描述
  3. 下载jdk,下载过程中判断[y/n]就输入y
sudo apt update
sudo apt install openjdk-11-jdk
  1. 下载完毕检查java版本来验证一下,能够显示具体的版本号即安装成功
java -version

在这里插入图片描述

  1. JPBC库官网点击下载下载以下压缩包,本地解压以jar包
    在这里插入图片描述
    在这里插入图片描述
    直接使用7-zip进行提取
    在这里插入图片描述

  2. 在我们连接的窗口这里,打开xftp的图标
    在这里插入图片描述

  3. 打开xftp,左边为本地,右边为云服务器,在右边右键新建文件夹 repository
    在这里插入图片描述
    所有jar包选择拖到右边,这里右边多了一个opencsv.jar的jar包,用来将数据写入csv表格的

在这里插入图片描述

至此,运行jpbc库的工作准备完毕

代码运行

  1. 在本地idea编辑好代码,这里使用官方给的BLS01做演示
import it.unisa.dia.gas.crypto.jpbc.signature.bls01.engines.BLS01Signer;
import it.unisa.dia.gas.crypto.jpbc.signature.bls01.generators.BLS01KeyPairGenerator;
import it.unisa.dia.gas.crypto.jpbc.signature.bls01.generators.BLS01ParametersGenerator;
import it.unisa.dia.gas.crypto.jpbc.signature.bls01.params.BLS01KeyGenerationParameters;
import it.unisa.dia.gas.crypto.jpbc.signature.bls01.params.BLS01Parameters;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;
import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.CryptoException;
import org.bouncycastle.crypto.digests.SHA256Digest;

public class BLS01 {
    public BLS01() {
               }

               public BLS01Parameters setup() {
                   BLS01ParametersGenerator setup = new BLS01ParametersGenerator();

                   setup.init(PairingFactory.getPairingParameters("a.properties"));

                   return setup.generateParameters();
               }

             public AsymmetricCipherKeyPair keyGen(BLS01Parameters parameters) {
                   BLS01KeyPairGenerator keyGen = new BLS01KeyPairGenerator();
                   keyGen.init(new BLS01KeyGenerationParameters(null, parameters));

                   return keyGen.generateKeyPair();
               }

               public byte[] sign(String message, CipherParameters privateKey) {
                   byte[] bytes = message.getBytes();

                   BLS01Signer signer = new BLS01Signer(new SHA256Digest());
                   signer.init(true, privateKey);
                   signer.update(bytes, 0, bytes.length);

                   byte[] signature = null;
                   try {
                           signature = signer.generateSignature();
                       } catch (CryptoException e) {
                           throw new RuntimeException(e);
                       }
                   return signature;
               }

               public boolean verify(byte[] signature, String message, CipherParameters publicKey) {
                   byte[] bytes = message.getBytes();

                   BLS01Signer signer = new BLS01Signer(new SHA256Digest());
                   signer.init(false, publicKey);
                   signer.update(bytes, 0, bytes.length);

                   return signer.verifySignature(signature);
               }

              public static void main(String[] args) {
                  BLS01 bls01 = new BLS01();

                  // Setup
                  AsymmetricCipherKeyPair keyPair = bls01.keyGen(bls01.setup());

                  // Test same message
                  String message = "Hello World!";
                  System.out.println((bls01.verify(bls01.sign(message, keyPair.getPrivate()), message, keyPair.getPublic())));

                  // Test different messages
                  System.out.println((bls01.verify(bls01.sign(message, keyPair.getPrivate()), "Hello Italy!", keyPair.getPublic())));
              }

}

该方案用的是A曲线,需要新建a.properties这样一个文件,用于对称的双线性映射

type a
q 8780710799663312522437781984754049815806883199414208211028653399266475630880222957078625179422662221423155858769582317459277713367317481324925129998224791
h 12016012264891146079388821366740534204802954401251311822919615131047207289359704531102844802183906537786776
r 730750818665451621361119245571504901405976559617
exp2 159
exp1 107
sign1 1
sign0 1

如果是非对称的双线性映射则使用F曲线,新建一个f.properties的文件

type f
q 205523667896953300194896352429254920972540065223
r 205523667896953300194895899082072403858390252929
b 40218105156867728698573668525883168222119515413
beta 115334401956802802075595682801335644058796914268
alpha0 191079354656274778837764015557338301375963168470
alpha1 71445317903696340296199556072836940741717506375

  1. 左边切换到代码所在的目录,右边新建javaTest目录并进入,将java 代码和曲线文件都拖到右边
    在这里插入图片描述
    java代码和曲线文件一定要在同一目录
    在这里插入图片描述
  2. 运行代码,回到XShell,切换到代码所在目录,执行以下命令,先用javac编译
javac -cp ~/repository/*:. BLS01.java

ls查看,有一个BLS01.class文件,编译成功
在这里插入图片描述
执行运行命令,得到结果

java -cp ~/repository/*:. BLS01

在这里插入图片描述

  • 后续更新如何使用opencsv.
Android studio 配置 jPBC 2.0.0 1、在压缩包的jars文件夹下找到下面两个文件:jpbc-api-2.0.0.jar    和   jpbc-plaf-2.0.0.jar 2、将上述两个jar包导入工程依赖包!!不会的百度一下Android studio怎么导入jar包!!! 3、在压缩包的jpbc-android文件夹下的assets文件夹下有4个用于测试的椭圆曲线常数Properties:a.properties、d159.properties、d201.properties,以及d224.properties,应该挪到Android 工程的assets文件夹下(当然也不一定非是这4个,只要是.properties参数文件都可以放进去,以供调用!!!),重点来了,Android studio 中并没有assets文件夹(assets文件夹是基于Eclipse进行android开发时专门存放资源文件的地方),怎么办呢?(android  studio老鸟勿喷)。实际上Android studio 也有存放资源文件的地方,那就是res文件夹!!!所以在Android strudio中我们可以新建一个与res文件夹并列的assets文件夹,具体步骤为:          点击main文件夹,然后右键---->New---->Folder---->Assets Folder---->点击完成      然后就可以发现main文件夹下多了一个assets资源文件夹!!!然后再把上述4个文件放进去就好了!!! 注意在加密中经常用到.properties文件,所以可以采用如下方式调用:                 Pairing pairing = PairingFactory.getPairing("assets/e_181_1024.properties");                 Field G = pairing.getG1();                 Field GT = pairing.getGT();                 Field Zq = pairing.getZr(); 之后就可以在工程里正常调用jpbc相关函数并进行加密了!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值