Печать / экспорт открытого ключа в AppEngine PyCrypto - PullRequest
2 голосов
/ 27 января 2012

Google AppEngine в настоящее время использует старую версию PyCrypto .

После создания RSAkey я не могу найти способ экспортировать publickey.

Увы, документы для Pycrypto 2.01 в настоящее время 404. И методы .export, которые я вижу в текущем коде, не работают в PyCrypto 2.01:

Создание пары ключей:

rsa_key = RSA.generate(384, random_generator) 

Доступные методы проверки:

In [84]: rsa_key.publickey. <tab>
RSAkey.publickey.__call__          RSAkey.publickey.__func__          RSAkey.publickey.__reduce__        RSAkey.publickey.__str__
RSAkey.publickey.__class__         RSAkey.publickey.__get__           RSAkey.publickey.__reduce_ex__     RSAkey.publickey.__subclasshook__
RSAkey.publickey.__cmp__           RSAkey.publickey.__getattribute__  RSAkey.publickey.__repr__          RSAkey.publickey.im_class
RSAkey.publickey.__delattr__       RSAkey.publickey.__hash__          RSAkey.publickey.__self__          RSAkey.publickey.im_func
RSAkey.publickey.__doc__           RSAkey.publickey.__init__          RSAkey.publickey.__setattr__       RSAkey.publickey.im_self
RSAkey.publickey.__format__        RSAkey.publickey.__new__           RSAkey.publickey.__sizeof__        

Печать не работает.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Просто взгляните на код, чтобы увидеть:

def generate(bits, randfunc, progress_func=None):
    """generate(bits:int, randfunc:callable, progress_func:callable)

    Generate an RSA key of length 'bits', using 'randfunc' to get
    random data and 'progress_func', if present, to display
    the progress of the key generation.
    """
    obj=RSAobj()
    # Generate random number from 0 to 7
    difference=ord(randfunc(1)) & 7

    # Generate the prime factors of n
    if progress_func: progress_func('p\n')
    obj.p=pubkey.getPrime(bits/2, randfunc)
    if progress_func: progress_func('q\n')
    obj.q=pubkey.getPrime((bits/2)+difference, randfunc)
    obj.n=obj.p*obj.q

    # Generate encryption exponent
    if progress_func: progress_func('e\n')
    obj.e=pubkey.getPrime(17, randfunc)
    if progress_func: progress_func('d\n')
    obj.d=pubkey.inverse(obj.e, (obj.p-1)*(obj.q-1))
    return obj

Этот сайт содержит хорошее объяснение значения каждой переменной.

1 голос
/ 29 января 2012

Должно быть возможно использовать модуль pickle, если совместимость не так важна для вас.

import pickle

keyout = pickle.dumps(rsa_key)
# Save keyout into a file or a db
[ ... ]
# Retrieve keyin from the same file or db
rsa_key = pickle.loads(keyin)
...