Ich bekomme eine verschlüsselte Base64-Zeichenfolge von Python. Das Format ist AES 256 CBC. Aber wenn ich versuche, mit iOS Swift entschlüsseln, geben Sie entschlüsselte Zeichenfolge als Null zurück.Wie entschlüsselt man die verschlüsselte Zeichenkette von Python?
# coding=utf-8
import base64
from random import choice
from string import letters
try:
from Crypto import Random
from Crypto.Cipher import AES
except ImportError:
import crypto
import sys
sys.modules['Crypto'] = crypto
from crypto.Cipher import AES
from crypto import Random
class AESCipher(object):
def __init__(self, key):
self.bs = 32
self.key = key
def encrypt(self, raw):
_raw = raw
raw = self._pad(raw)
print raw, ';'
print _raw, ';'
iv = "".join([choice(letters[:26]) for i in xrange(16)])
print " iv :", iv
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return base64.b64encode(iv + cipher.encrypt(raw))
def decrypt(self, enc):
enc = base64.b64decode(enc)
iv = enc[:AES.block_size]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')
def _pad(self, s):
a = (self.bs - len(s) % self.bs)
b = chr(self.bs - len(s) % self.bs)
return s + a * b
@staticmethod
def _unpad(s):
return s[:-ord(s[len(s) - 1:])]
def encrypt(k, t):
o = AESCipher(k)
return o.encrypt(t)
def decrypt(k, t):
o = AESCipher(k)
return o.decrypt(t)
def main():
k = "qwertyuiopasdfghjklzxcvbnmqwerty"
s1 = "Hello World!"
d2 = encrypt(k, s1)
print " Password :", k
print "Encrypted :", d2
print " Plain :", decrypt(k, d2)
if __name__ == '__main__':
main()
iOS
Hier verwende ich AES256CBC Lib https://github.com/SwiftyBeaver/AES256CBC
let decrypted = AES256CBC.decryptString("Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0+ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO", password: "qwertyuiopasdfghjklzxcvbnmqwerty")
print("decrypted: \(String(describing: decrypted))") // here I get nil
wenn Python Run ich dieses
Logbücheriv : bgjsvjvfuqwldmle
Password : qwertyuiopasdfghjklzxcvbnmqwerty
Encrypted : Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0+ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO
Plain : Hello World!
Ich weiß nicht, warum Python und iOS nicht gleiche in AES. Jeder, der dieses Problem löst, bitte die Antwort unten angeben. Danke im Voraus.
angegeben Eigentlich, was ist der Unterschied zwischen meinem Code und dein Code? – Alwin
Der Chiffretext: 'bgjsvjvfuqwldmleYmdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0 + ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO' Verkettung der Initialisierungsvektor (' bgjsvjvfuqwldmle') und die verschlüsselten Blöcke Ihrer Nachricht ist ('Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0 + ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO'). –
Das ist ok, aber ich weiß nicht, wie ich deine Ideen nutzen soll, weil ich Anfänger in iOS bin. Kannst du für mich testen? – Alwin