gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:26:13 26 4
gpt4 key购买 nike

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

有没有办法扩展魅力方案来加密文件?

根据 Artjom B 的评论进行编辑:

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)

最佳答案

当需要加密任意数据时,需要应用混合加密,即使用非对称密码系统加密随机元素,然后从随机元素派生对称 key ,以便使用所得 key 加密实际数据。

Charm 加密提供了 AES 版本来加密任意消息/数据:

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 通过渐进式加密来加密文件。

您必须创建自己的文件格式,以便将非对称密文组件和对称密文组件并排放置。

关于python - 有没有办法扩展 Charm-Crypto 方案来加密文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33102245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com