项目链接:https://github.com/JHUISI/charm

Charm是Joseph A. Akinyele等在2013提出的一个用于进行快速加密的平台(Python库),
再Charm平台里有着各种工具包能够进行加密,解密等,
具体包括IBE,ABE,AES,DES,RSA等对称以及非堆成加密。

Charm安装前准备


sudo apt install m4 flex bison libssl1.0-dev

目前仅Ubuntu18成功20未成功!!!!

下载PBC库、GMP库:

https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz

https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz

安装GMP库,GMP库是PBC库的基础,如果先安装PBC库会报错xz -d gmp-6.2.1.tar.xz tar -xvf gmp-6.2.1.tar cd gmp-6.2.1./configure##配置成功出现Version:           GNU MP 6.2.1Host type:         kabylake-pc-linux-gnuABI:               64Install prefix:    /usr/localCompiler:          gccStatic libraries:  yesShared libraries:  yes##makemake checksudo make install 安装PBC库tar -zxvf pbc-0.5.14.tar.gzcd pbc-0.5.14./configure##配置成功出现
-----------------------------------------
Sat May 29 23:26:34 CST 2021
host info:        x86_64-unknown-linux-gnu
optimized build:  no
compiler (CC):    gcc
LDFLAGS:
CPPFLAGS:
CFLAGS:            -Wall -W -Wfloat-equal -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wredundant-decls -Wendif-labels -Wshadow -pipe -ffast-math -U__STRICT_ANSI__ -std=gnu99 -fomit-frame-pointer -O3
LEX:              flex
AM_LFLAGS:
LFLAGS:
YACC:             bison -y
AM_YFLAGS:
YFLAGS:
-----------------------------------------
##makemake checksudo make install 

执行以下命令安装python的charm包

pip3 install charm-crypto==0.43 -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完后即可在python解释器中尝试

python3import charm
from charm.toolbox.pairinggroup import GT
更新动态链接库的缓存命令sudo ldconfig动态库cd /etc/ld.so.conf.d
ls

例子:

from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair
from charm.toolbox.secretutil import SecretUtil
from charm.toolbox.ABEnc import ABEnc, Input, Output# type annotations
pk_t = { 'g':G1, 'g2':G2, 'h':G1, 'f':G1, 'e_gg_alpha':GT }
mk_t = {'beta':ZR, 'g2_alpha':G2 }
sk_t = { 'D':G2, 'Dj':G2, 'Djp':G1, 'S':str }
ct_t = { 'C_tilde':GT, 'C':G1, 'Cy':G1, 'Cyp':G2 }debug = False
class CPabe_BSW07(ABEnc):""">>> from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair>>> group = PairingGroup('SS512')>>> cpabe = CPabe_BSW07(group)>>> msg = group.random(GT)>>> attributes = ['ONE', 'TWO', 'THREE']>>> access_policy = '((four or three) and (three or one))'>>> (master_public_key, master_key) = cpabe.setup()>>> secret_key = cpabe.keygen(master_public_key, master_key, attributes)>>> cipher_text = cpabe.encrypt(master_public_key, msg, access_policy)>>> decrypted_msg = cpabe.decrypt(master_public_key, secret_key, cipher_text)>>> msg == decrypted_msgTrue""" def __init__(self, groupObj):ABEnc.__init__(self)global util, grouputil = SecretUtil(groupObj, verbose=False)group = groupObj@Output(pk_t, mk_t)    def setup(self):g, gp = group.random(G1), group.random(G2)alpha, beta = group.random(ZR), group.random(ZR)# initialize pre-processing for generatorsg.initPP(); gp.initPP()h = g ** beta; f = g ** ~betae_gg_alpha = pair(g, gp ** alpha)pk = { 'g':g, 'g2':gp, 'h':h, 'f':f, 'e_gg_alpha':e_gg_alpha }mk = {'beta':beta, 'g2_alpha':gp ** alpha }return (pk, mk)@Input(pk_t, mk_t, [str])@Output(sk_t)def keygen(self, pk, mk, S):r = group.random() g_r = (pk['g2'] ** r)    D = (mk['g2_alpha'] * g_r) ** (1 / mk['beta'])        D_j, D_j_pr = {}, {}for j in S:r_j = group.random()D_j[j] = g_r * (group.hash(j, G2) ** r_j)D_j_pr[j] = pk['g'] ** r_jreturn { 'D':D, 'Dj':D_j, 'Djp':D_j_pr, 'S':S }@Input(pk_t, GT, str)@Output(ct_t)def encrypt(self, pk, M, policy_str): policy = util.createPolicy(policy_str)a_list = util.getAttributeList(policy)s = group.random(ZR)shares = util.calculateSharesDict(s, policy)      C = pk['h'] ** sC_y, C_y_pr = {}, {}for i in shares.keys():j = util.strip_index(i)C_y[i] = pk['g'] ** shares[i]C_y_pr[i] = group.hash(j, G2) ** shares[i] return { 'C_tilde':(pk['e_gg_alpha'] ** s) * M,'C':C, 'Cy':C_y, 'Cyp':C_y_pr, 'policy':policy_str, 'attributes':a_list }@Input(pk_t, sk_t, ct_t)@Output(GT)def decrypt(self, pk, sk, ct):policy = util.createPolicy(ct['policy'])pruned_list = util.prune(policy, sk['S'])if pruned_list == False:return Falsez = util.getCoefficients(policy)A = 1 for i in pruned_list:j = i.getAttributeAndIndex(); k = i.getAttribute()A *= ( pair(ct['Cy'][j], sk['Dj'][k]) / pair(sk['Djp'][k], ct['Cyp'][j]) ) ** z[j]return ct['C_tilde'] / (pair(ct['C'], sk['D']) / A)def main():   groupObj = PairingGroup('SS512')cpabe = CPabe_BSW07(groupObj)attrs = ['ONE', 'TWO', 'THREE']access_policy = '((four or three) and (three or one))'if debug:print("Attributes =>", attrs); print("Policy =>", access_policy)(pk, mk) = cpabe.setup()sk = cpabe.keygen(pk, mk, attrs)print("sk :=>", sk)rand_msg = groupObj.random(GT)if debug: print("msg =>", rand_msg)ct = cpabe.encrypt(pk, rand_msg, access_policy)if debug: print("\n\nCiphertext...\n")groupObj.debug(ct)rec_msg = cpabe.decrypt(pk, sk, ct)if debug: print("\n\nDecrypt...\n")if debug: print("Rec msg =>", rec_msg)assert rand_msg == rec_msg, "FAILED Decryption: message is incorrect"if debug: print("Successful Decryption!!!")if __name__ == "__main__":debug = Truemain()

Charm安装、使用相关推荐

  1. ubuntu 16.04 安装anaconda tensorflow opencv keras openslide-python pycharm

    安装anaconda 首先在anaconda的清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载anaconda3-5.1.0 ...

  2. charm-crypto库安装

    charm-crypto库安装 安装过程中踩了很多坑,总结一下 Linux 安装 参考博客 charm安装:https://blog.csdn.net/qq_34823530/article/deta ...

  3. Charm-crypto的安装与使用

    Charm简介 Charm是Joseph A. Akinyele等在2013提出的一个用于进行快速加密的平台(Python库),再Charm平台里有着各种工具包能够进行加密,解密等,具体包括IBE,A ...

  4. pyQt5 帮助手册的使用

    文章目录 参考Qt官方手册 本地动态生成 参考Qt官方手册 在学习pyQt5的时候,我们经常需要去查看某一个控件具体有什么的方法,以及这些方法怎么用.这里就需要帮助文档了,我们可以通过参考Qt官方网站 ...

  5. Canonical Juju 使用笔记

    ubuntu 版本代号: lucid(10.04) Natty(11.04)     Oneiric(11.10)     Precise(12.04)     Quantal(12.10)      ...

  6. Play with LDAP + Keystone (by quqi99)

    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (作者:张华 发表于:2018-05-29) Install OpenLDAP OpenLDAP Server可 ...

  7. python charm下载安装教程-Python及Pycharm安装方法图文教程

    Python及Pycharm安装方法,供大家参考,具体内容如下 1.任务简介 为了学习Python我今天对它进行了安装,整个安装过程忘了截图,故我在虚拟机中重新安装了一遍,并将Python及Pycha ...

  8. Python零基础入门(1)——Linux下编程图形化界面的安装

    LInux中安装最好使用普通用户,如果你使用root超级用户安装的话,可能会出现一些小问题.比如:在程序中写注释时无法时用中文等等 1.软件安装包的准备--pycharm-community-2018 ...

  9. 手把手教你从零上手Python(付安装地址、代码)

    来源:大数据文摘 本文共3974字,建议阅读7分钟. 通过本文带给大家从零开始学习Python应该怎么做! 数据科学团队在持续稳定的发展壮大,这也意味着经常会有新的数据科学家和实习生加入团队.我们聘用 ...

最新文章

  1. NYOJ 14 会场安排问题
  2. linux (ubuntu)安装pycharm
  3. 832. Flipping an Image
  4. vb.net 文本框为空提示,一键清空文本框所有内容
  5. Ubuntu 16.04安装Bless十六进制编辑器
  6. 计算机网络技术-----==一些东西
  7. 一文学会 Prometheus:开源系统监视和警报工具包!
  8. [tensorflow]win 环境 安装anacoda 4.8.2 和tensorflow 2.1.0
  9. SQL查询效率-100w数据查询只要1秒
  10. cmd命令卸载sql server_如何卸载SQL server
  11. 摄影网站主页源码html,2017年最新15个漂亮的 HTML 摄影网站模板
  12. 企业致胜在于人本管理--盖洛普著名的Q12
  13. 软件测试使用linux做什么?
  14. sublime text3 英文版转为中文版
  15. 2.4G功放芯片,支持国产
  16. 【spark实训】-- Scala实现单词计数
  17. Vue2,Webpack的基础配置以及使用脚手架创建工程
  18. 利用铁匠组件实现在线头像截图的效果
  19. SAP GUI的界面设置和语言选择
  20. Python入门 NUMECA计算文件处理(一)

热门文章

  1. 微信公众平台深度开发JAVA版第一季 10.接收普通消息3
  2. mysql 向上递归查询_mysql如何实现递归查询
  3. 【渗透测试】渗透测试实施一般步骤
  4. 手机wap1开发--单选
  5. python 连通域面积_使用OpenCV去除面积较小的连通域
  6. 基于迅为3568开发板的文件系统构建
  7. Excel 页面打开空白,解决的配置方法
  8. 用python给MP3加封面图片,修改作者,专辑等信息
  9. 写在毕业之前-回顾2017,展望2018-
  10. java-使用SImpleDateFormat格式化时间输出