rsa算法的python包是什么

rsa算法的python包是什么,python,cryptography,rsa,privacy,encryption-asymmetric,Python,Cryptography,Rsa,Privacy,Encryption Asymmetric,希望在python中对短字符串进行RSA加密。这是针对我想要存储的一段用户数据,而工作人员(包括我自己)无法看到它。当我们被传唤时,私钥会放在我保险箱的拇指驱动器上 我的问题:对于非对称密钥RSA是否有一个“可能正确”的python包?使用C库是否会更安全(如果是,是哪一个)。使用RSA加密短字符串可能会有问题。您可以使用RSA对某些数据进行加密,以显示有关私钥的详细信息。在您的情况下,它可能会很好,因为它会足够模糊,您的员工无法理解它。但在一般情况下,对于知识渊博和/或资金雄厚的对手,如果希望

希望在python中对短字符串进行RSA加密。这是针对我想要存储的一段用户数据,而工作人员(包括我自己)无法看到它。当我们被传唤时,私钥会放在我保险箱的拇指驱动器上


我的问题:对于非对称密钥RSA是否有一个“可能正确”的python包?使用C库是否会更安全(如果是,是哪一个)。

使用RSA加密短字符串可能会有问题。您可以使用RSA对某些数据进行加密,以显示有关私钥的详细信息。在您的情况下,它可能会很好,因为它会足够模糊,您的员工无法理解它。但在一般情况下,对于知识渊博和/或资金雄厚的对手,如果希望数据保密,则不希望使用RSA直接加密数据


我建议只使用。它为您解决了所有这些问题。

听起来您实际上想要对称加密。不,它必须是不对称的。公钥保存在服务器上,我的员工可以访问它。你为什么要寻找一个“可能正确”的解决方案而不是一个“正确”的解决方案?@MAK:我想这可能是对“好的密码很难”这句老话的认可-即使是考虑到安全性而设计的系统也可能存在意外的弱点。@MAK您知道任何保证正确的软件包吗?您是想参与其中,还是使用它?@gregs我希望它是安全的,并从proven中借用C代码projects@amwinter当前位置没有人能肯定地告诉你它是安全的,你必须自己决定。PyCrypto有一个记录,所以也许这会让你满意。哇,对Stackoverflow来说,这真是一个悲伤的日子。两个相当好的加密库被pycrypto淘汰,pycrypto是现存最差的库之一。(例如,pycrypto饱受不完整、缺少填充物和可怕界面的折磨)@Accipitridae不,这是Stackoverflow的好日子。该网站的目的是建立我们所有的知识。你似乎对加密技术相当了解。请告诉我们每个包的优点和缺点(单独的答案可能最合适)。您是在谈论普通模数攻击吗?@amwinter-如果值太小,指数也很小(通常情况下)然后就可以简单地取结果的根来获得原始消息。这并没有透露任何关于私钥的信息,但它确实使加密变得毫无用处。还有另一个攻击确实泄露了有关私钥的信息,但我记不起它的名称,所以你可能是对的。还有一种对签名的选择明文攻击,这就是为什么您总是对哈希进行签名。@amwinter-我查过了。我说的是与低加密指数相关的攻击。解决低加密指数问题的一种方法是发送小于最大大小的消息,并用大量随机数据填充它们,这正是gnupg加密用于实际加密的对称密钥时所做的。@amwinter:只需使用标准PKCS#1填充。@GregS-标准PKCS#1填充真的很复杂。只需要使用一个已经完成的工具。
def gcd (a, b):
    "Compute GCD of two numbers"

    if b == 0: return a
    else: return gcd(b, a % b)

def multiplicative_inverse(a, b):
    """ Find multiplicative inverse of a modulo b (a > b)
        using Extended Euclidean Algorithm """

    origA = a
    X = 0
    prevX = 1
    Y = 1
    prevY = 0

    while b != 0:

        temp = b
        quotient = a/b
        b = a % b
        a = temp

        temp = X
        a = prevX - quotient * X
        prevX = temp

        temp = Y
        Y = prevY - quotient * Y
        prevY = temp

    return origA + prevY

def generateRSAKeys(p, q):
    "Generate RSA Public and Private Keys from prime numbers p & q"

    n = p * q
    m = (p - 1) * (q - 1)

    # Generate a number e so that gcd(n, e) = 1, start with e = 3
    e = 3

    while 1:

        if gcd(m, e) == 1: break
        else: e = e + 2

    d = multiplicative_inverse(m, e)   

    # Return a tuple of public and private keys 
    return ((n,e), (n,d))           

if __name__ == "__main__":

    print "RSA Encryption algorithm...."
    p = long(raw_input("Enter the value of p (prime number):"))
    q = long(raw_input("Enter the value of q (prime number):"))

    print "Generating public and private keys...."
    (publickey, privatekey) = generateRSAKeys(p, q)

    print "Public Key (n, e) =", publickey
    print "Private Key (n, d) =", privatekey

    n, e = publickey
    n, d = privatekey

    input_num = long(raw_input("Enter a number to be encrypted:"))
    encrypted_num = (input_num ** e) % n
    print "Encrypted number using public key =", encrypted_num
    decrypted_num = encrypted_num ** d % n
    print "Decrypted (Original) number using private key =", decrypted_num