gpt4 book ai didi

ios - 如何解密来自python的加密字符串?

转载 作者:行者123 更新时间:2023-11-28 08:08:24 25 4
gpt4 key购买 nike

我从 python 得到一个加密的 base64 字符串。格式为 AES 256 CBC。但是,当我尝试使用 iOS Swift 解密时,它会将解密后的字符串返回为 nil。

# 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()

苹果

这里我使用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

当 python 运行时我得到这个日志

iv : bgjsvjvfuqwldmle
Password : qwertyuiopasdfghjklzxcvbnmqwerty
Encrypted : Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0+ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO
Plain : Hello World!

我不知道为什么 python 和 iOS 在 AES 中不一样。任何解决此问题的人请在下面给出答案。提前致谢。

最佳答案

我认为您需要先解码您的 base64 字符串。也许这会起作用(只是用谷歌搜索,我不是 iOS 开发人员,所以对于最终的错误我很抱歉)

let decodedData = NSData("Ymdqc3ZqdmZ1cXdsZG1sZenhgr4Xt0+ceARYRh1n40QkNDV/dyKbQjYLcbiXBBeO": base64String, options:NSDataBase64DecodingOptions.fromRaw(0)!)
let decodedString = NSString(data: decodedData, encoding: NSUTF8StringEncoding)
let decrypted = AES256CBC.decryptString(decodedString, password: "qwertyuiopasdfghjklzxcvbnmqwerty")
print("decrypted: \(String(describing: decrypted))")

documentation 中也有说明

关于ios - 如何解密来自python的加密字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44432232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com