自定义Python加密算法

自定义Python加密算法,python,encryption,Python,Encryption,嘿,我在这方面已经做了一段时间了,我记得我哥哥曾让我经历过同样的事情 基本上,它只添加键中字符和短语的ascii值 我可以用这个加密它: def encrypt(key, string): encoded = '' for i in range(len(string)): key_c = ord(key[i % len(key)]) string_c = ord(string[i % len(string)]) encoded +=

嘿,我在这方面已经做了一段时间了,我记得我哥哥曾让我经历过同样的事情

基本上,它只添加键中字符和短语的ascii值

我可以用这个加密它:

def encrypt(key, string):
    encoded = ''
    for i in range(len(string)):
        key_c = ord(key[i % len(key)])
        string_c = ord(string[i % len(string)])
        encoded += chr((key_c + string_c) % 127)
    return encoded
但我似乎不记得我们解密时做了什么。很难反转一个mod:P
有什么想法吗?

解密是一样的,除了用减号而不是加号。

但是你不需要反转mod,只需要
+key\u c
,对吗?所以,只需加128,减去键c,再对127进行模运算,以保持在范围内。(不是最后一行,所有其他行与加密相同。

这很简单,让我们看看它是如何工作的。首先,加密消息是通过减去密钥获得的

enc = msg + key (mod 127)
我们如何获得原始信息?很简单,两边都减去关键点

enc - key = msg + key - key (mod 127)
现在我们得到:

enc - key = msg (mod 127)
有关更多详细信息,请参阅,我认为它应该属于group/field/ring中的一个。我不是数学方面的专家,为了进一步阅读,您应该查看。以下是改进的代码:

def encrypt(key, msg):
    encryped = []
    for i, c in enumerate(msg):
        key_c = ord(key[i % len(key)])
        msg_c = ord(c)
        encryped.append(chr((msg_c + key_c) % 127))
    return ''.join(encryped)

def decrypt(key, encryped):
    msg = []
    for i, c in enumerate(encryped):
        key_c = ord(key[i % len(key)])
        enc_c = ord(c)
        msg.append(chr((enc_c - key_c) % 127))
    return ''.join(msg)

if __name__ == '__main__':
    key = 'This_is_my_awsome_secret_key'
    msg = 'Hello world'
    encrypted = encrypt(key, msg)
    decrypted = decrypt(key, encrypted)
    
    print 'Message:', repr(msg)
    print 'Key:', repr(key)
    print 'Encrypted:', repr(encrypted)
    print 'Decrypted:', repr(decrypted)
输出

Message: 'Hello world'
Key: 'This_is_my_awsome_secret_key'
Encrypted: '\x1dNV`O\nkO`fD'
Decrypted: 'Hello world'

如果我这样做的话,我能把加密文件变成ascii可打印字符吗:chr((key_c+string_c)%95+32)这是一个好文件。Osam dude..谢谢你救了我一天