首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法扩展Charm-Crypto方案来加密文件?

有没有办法扩展Charm-Crypto方案来加密文件?
EN

Stack Overflow用户
提问于 2015-10-13 20:04:01
回答 1查看 546关注 0票数 1

据我所知,实现的Charm方案只允许您加密随机生成的group元素或编码为group元素的msg字符串。但这些也有局限性,因为群元素的顺序是从质数派生的。

有没有一种方法可以扩展魅力方案来加密文件?

根据Artjom B的评论编辑:

代码语言:javascript
复制
def encrypt(self, pk, M, object):
    key = self.group.random(GT)
    c1 = abenc.encrypt(pk, key, object)
    # instantiate a symmetric enc scheme from this key
    cipher = AuthenticatedCryptoAbstraction(sha1(key))
    c2 = cipher.encrypt(M)
    return { 'c1':c1, 'c2':c2 } 


f = open(pth,'r')
message = f.read()
pk, mk = abenc.setup() 
att_list=['TWO','FOUR']
access_policy = '((four or three) and (two or one))'  
sk = abenc.keygen(pk, mk, att_list)     
ct = encrypt(pk, message, access_policy)
EN

回答 1

Stack Overflow用户

发布于 2015-10-13 20:49:40

当需要加密任意数据时,则需要通过使用非对称密码系统加密随机元素,然后从该随机元素导出对称密钥来应用混合加密,以便使用所得到的密钥来加密实际数据。

Charm crypto提供了一个AES版本,用于加密任意消息/数据:

代码语言:javascript
复制
from charm.toolbox.pairinggroup import PairingGroup,ZR,G1,G2,GT,pair
from charm.toolbox.symcrypto import AuthenticatedCryptoAbstraction, SymmetricCryptoAbstraction
from charm.core.math.pairing import hashPair as extractor

group = PairingGroup("SS512")

r = group.random(G1)
msg = b"This is a secret message that is larger than the group elements and has to be encrypted symmetrically"

symcrypt = AuthenticatedCryptoAbstraction(extractor(r)) # or SymmetricCryptoAbstraction without authentication

# encryption
ciphertext = symcrypt.encrypt(msg)

# decryption
recoveredMsg = symcrypt.decrypt(ciphertext)

assert msg == recoveredMsg
print(recoveredMsg)

extractor()函数实际上是元素字节的SHA-256散列,因此可以处理所有类型的元素。

SymmetricCryptoAbstraction在CBC模式下使用AES加密数据,并使用随机IV和PKCS#7填充。它在内部是Base64编码的,但是被编码成了JSON字符串。这个类不适合加密文件,因为文件数据必须完全加载到内存中,并且可能不适用于大文件。使用pyCrypto使用渐进式加密对文件进行加密。

您必须创建自己的文件格式,以便容纳彼此相邻的非对称密文组件和对称密文组件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33102245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档