1
私はPythonから暗号化されたbase64文字列を取得します。フォーマットはAES 256 CBCです。しかし、私がiOS Swiftを使用して解読しようとすると、解読された文字列をゼロとして返します。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
ここでPythonの実行が、私はこれが理由のpythonとiOS同じではない私にはわからない
iv : bgjsvjvfuqwldmle
Password : qwertyuiopasdfghjklzxcvbnmqwerty
Encrypted : Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0+ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO
Plain : Hello World!
を記録し得るとき、私はhttps://github.com/SwiftyBeaver/AES256CBC
let decrypted = AES256CBC.decryptString("Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0+ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO", password: "qwertyuiopasdfghjklzxcvbnmqwerty")
print("decrypted: \(String(describing: decrypted))") // here I get nil
AES256CBC Libのを使用AESで誰でもこの問題を解決してください。前もって感謝します。
に述べています実際に私の違いは何ですかコードとコード? – Alwin
暗号文: 'bgjsvjvfuqwldmleYmdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0 + ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO'は、初期化ベクトル(' bgjsvjvfuqwldmle')およびメッセージの暗号化されたブロック( 'Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0 + ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO')の連結です。 –
ああ、私はiOSの初心者なのであなたのアイデアをどのように活用するのか分かりません。あなたは私のためにテストできますか? – Alwin