package com.xyl.xzyf2020;/*** @BelongsProject: JavaSE_code* @BelongsPackage: com.xyl.xzyf2020* @Auther: Yongliang Xu l1264009784@163.com* @Date: 2021/4/1 09:11* @Description:* @since JDK 1.8*/
public interface XZYF {void buildSystem();//系统建立void setSecretValue();//设置秘密值void setPK();//设置公钥void setPartialSK();//部分私钥提取void setSK();//设置私钥void Sc();//签密void Dsc();//解签密
}
package com.xyl.xzyf2020;/*** @BelongsProject: JavaSE_code* @BelongsPackage: com.xyl.xzyf2020* @Auther: Yongliang Xu l1264009784@163.com* @Date: 2021/4/1 09:25* @Description:* @since JDK 1.8*/import com.xyl.de.TimeCountProxyHandle;
import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Field;
import it.unisa.dia.gas.jpbc.Pairing;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;import java.lang.reflect.Proxy;
import java.math.BigInteger;/***@ClassName XZYF2020*@Description TODO*@Author Yongliang Xu*@Date 2021/4/1 9:25*@Version 1.0*/
public class XZYF2020 implements XZYF{Pairing pairing;Field Zr;Element x_a,x_b,h0_a,h0_b,PK_a,PK_b,e,d,d_a,d_b,r1,r2,R1,R2,r,s,h,u1,u2,R11,R22,rr,zero;public XZYF2020() {init();}public void init(){pairing = PairingFactory.getPairing("a.properties");PairingFactory.getInstance().setUsePBCWhenPossible(true);checkSymmetric(pairing);Zr = pairing.getZr();x_a=Zr.newElement();//秘密值x_b=Zr.newElement();h0_a=Zr.newElement();//哈希h0_b=Zr.newElement();//哈希PK_a=Zr.newElement();//公钥PK_b=Zr.newElement();e=Zr.newElement();//主公钥d=Zr.newElement();//主私钥d_a=Zr.newElement();//部分私钥d_b=Zr.newElement();r1=Zr.newElement();//随机数r2=Zr.newElement();R1=Zr.newElement();R2=Zr.newElement();r=Zr.newElement();s=Zr.newElement();h=Zr.newElement();u1=Zr.newElement();u2=Zr.newElement();R11=Zr.newElement();R22=Zr.newElement();rr=Zr.newElement();zero=Zr.newElement();}private void checkSymmetric(Pairing pairing) {if (!pairing.isSymmetric()) {throw new RuntimeException("密钥不对称");}}@Overridepublic void buildSystem() {e=Zr.newRandomElement().getImmutable();d=e.invert().getImmutable();System.out.println("----------------系统建立----------------");System.out.println("e="+e);System.out.println("d="+d);System.out.println("ed="+e.mul(d));}@Overridepublic void setSecretValue() {x_a=Zr.newRandomElement().getImmutable();//秘密值x_b=Zr.newRandomElement().getImmutable();//秘密值System.out.println("---------------设置秘密值---------------");System.out.println("x_a="+x_a);System.out.println("x_b="+x_b);}@Overridepublic void setPK() {h0_a=Zr.newRandomElement().getImmutable();//模拟H0(ID_a)h0_b=Zr.newRandomElement().getImmutable();//模拟H0(ID_a)PK_a = h0_b.powZn(x_a).getImmutable();PK_b = h0_b.powZn(x_b).getImmutable();System.out.println("----------------设置公钥----------------");System.out.println("PK_a="+PK_a);System.out.println("PK_b="+PK_b);}@Overridepublic void setPartialSK() {d_a=PK_a.powZn(d).getImmutable();d_b=PK_b.powZn(d).getImmutable();System.out.println("---------------部分私钥提取---------------");System.out.println("d_a="+d_a);System.out.println("d_b="+d_b);}@Overridepublic void setSK() {System.out.println("----------------设置私钥----------------");System.out.println("SK_a=(x_a,d_a)="+x_a+","+d_a);//完全私钥System.out.println("SK_b=(x_b,d_b)="+x_b+","+d_b);}@Overridepublic void Sc() {r1 = Zr.newRandomElement().getImmutable();r2 = Zr.newRandomElement().getImmutable();R1= h0_b.powZn(e.mul(r1)).getImmutable();//R2= h0_b.powZn(r2).getImmutable();r=(PK_b.powZn(r2)).mul(d_a.powZn(x_a.invert())).getImmutable();h=Zr.newRandomElement().getImmutable();//        zero=zero.setToZero();// u1=(h0_b.powZn(r1)).mul((d_a.invert()).powZn(h)).getImmutable();
//        System.out.println("u1="+u1);u1=(h0_b.powZn(r1)).mul(d_a.powZn(h.negate())).getImmutable();
//        System.out.println("u1="+u1);
//        u1=(h0_b.powZn(r1)).mul(d_a.powZn(zero.sub(h))).getImmutable();
//        System.out.println("u1="+u1);u2=r2.div(h.add(x_a)).getImmutable();System.out.println("------------------签密------------------");System.out.println("R1="+R1);System.out.println("R2="+R2);System.out.println("r="+r);System.out.println("u1="+u1);System.out.println("u2="+u2);System.out.println("h="+h);}@Overridepublic void Dsc() {System.out.println("-----------------解签密------------------");R11=(u1.powZn(e)).mul(PK_a.powZn(h)).getImmutable();//R22=(PK_a.powZn(u2)).mul((h0_b).powZn(h.mul(u2))).getImmutable();System.out.println("R11="+R11);System.out.println("R22="+R22);if(R1.isEqual(R11)&&R2.isEqual(R22)){//System.out.println("验证成功");rr=R22.powZn(x_b).mul(d_b.powZn(x_b.invert())).getImmutable();System.out.println("rr="+rr);if(r.isEqual(rr)){System.out.println("解密成功");}else {System.out.println("解密失败");}}else{System.out.println("验证失败");}}public static void main(String[] args) {XZYF2020 xzyf2020 = new XZYF2020();XZYF identProxy =  (XZYF) Proxy.newProxyInstance(XZYF.class.getClassLoader(),new Class[]{XZYF.class},new TimeCountProxyHandle(xzyf2020));identProxy.buildSystem();identProxy.setSecretValue();identProxy.setPK();identProxy.setPartialSK();identProxy.setSK();identProxy.Sc();identProxy.Dsc();}
}

JPBC实现基于RSA的CLSC算法问题在哪,怎么修改,帮我看看相关推荐

  1. 基于RSA盲签名的隐私集合求交PSI算法

    记录一种PSI算法. 在<Practical Private Set Intersection Protocols with Linear Computational and Bandwidth ...

  2. 一个基于RSA算法的Java数字签名例子

    ====================================================== 注:本文源代码点此下载 ================================= ...

  3. 基于https国密算法构建安全数据传输链路

    网络数据安全得到前所未有的重视 HTTPS成为解决传输安全问题利器 大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站 ...

  4. 基于RSA的公钥基础体系下安全通信实战

    目录 简说RSA 服务器的初始密钥对和认证请求 证书认证机构CA 服务器安装CA签名证书 客户机 小结 从样板戏<红灯记>到好莱坞谍战大片<风语者Windtalkers>等,许 ...

  5. 基于RSA和AES混合加密实现的加解密小工具

    基于RSA和AES混合加密实现的加解密小工具 闲来无事,用python的tkinter开发了一个基于RSA和AES混合加密的小小工具.总结一下使用到的知识点. 首先是核心的加解密部分. 采用混合加密的 ...

  6. 用实例给新手讲解易懂的RSA加密解密算法

    用实例给新手讲解易懂的RSA加密算法 RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.我查过论坛上很少这方面的介绍,恰好看到一本书中作者用实例对它进行了简化而生动的描述,使得高深 ...

  7. 阿里云CDN不止于加速:基于https国密算法构建安全数据传输链路

    网络数据安全得到前所未有的重视 HTTPS成为解决传输安全问题利器 大家都知道,HTTP 本身是明文传输的,没有经过任何安全处理,网站HTTPS解决方案通过在HTTP协议之上引入证书服务,完美解决网站 ...

  8. RSA加密解密算法代码实现【scalajava】

    1. 什么是RSA加密算法? 1.1 对称加密和非对称加密 对称加密:对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密.对称加密只有一个秘钥,作为私钥.常见的对称加密算法:DES,AES,3 ...

  9. iOS中使用基于RSA使用公钥加密和公钥解密

    前言 最近在公司项目中被要求使用RSA加密,且要求是全程加解密,期间也是踩了很多的坑,在此做个记录也算给要使用的朋友一点帮助.注意,具体的RSA加密算法内容并不在此文的讨论范围之内.本文更多聚焦于使用 ...

最新文章

  1. 你动、蒙娜丽莎跟着一起动,OpenCV这么用,表情口型造假更难防了
  2. vector容器的用法
  3. XenDesktop vDisk更新
  4. STM32 SPI的使用
  5. 数据中心水环热泵余热回收系统分析与应用
  6. gRPC的通信方式-客户端流式、服务端流式、双向流式在Java的调用示例
  7. SciPy 非线性方程求解 | Python技能树征题
  8. Docker 之 概念介绍
  9. Win10下WinRAR“拒绝访问”解决+获取everyone权限
  10. 网络安全学习和CTF必不可少的一些网站
  11. 02. Compose 可组合组件之 属性 modifier
  12. 虚拟机一插U盘或读卡器就死机的解决办法
  13. 铁死亡,究竟该如何检测?- MedChemExpress
  14. PCL:直通滤波(单一字段 | 多字段)
  15. linux 搭建 MeepoPS+Socket
  16. 如何入门现代控制理论
  17. 淘宝运营教程:淘宝工具提高店铺流量
  18. 2021-07-11谓词执行
  19. CW3002F与CW3002G参数对比|CW3002F与CW3002G方案设计差异|CW3002G直接替代CW3002F
  20. 读书笔记——《人生的智慧》

热门文章

  1. group by后乱序问题原因和解决
  2. 阿里云和腾讯云服务器哪个好用?
  3. 安徽省发票认证服务器网站,安徽省增值税发票综合服务平台网址及操作指南
  4. 测试高考体育成绩的软件,2020年新版高考体育测试成绩100分值对照表.docx
  5. 查看linux 系统 服务器型号
  6. P5200 [USACO19JAN]Sleepy Cow Sorting G
  7. 为什么你微信公众号的阅读量越来越低了?
  8. 第十四章 字符编码(补充)
  9. Excel、Word、PPT显示VB运行时错误53的解决办法
  10. 移动拨号上网开热点(不是360开热点,而是使用电脑自带的热点功能)详解