200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > python混淆加密ios代码_用AES(MODE_CBC/NoPadding)解密用Python加密的iOS文件

python混淆加密ios代码_用AES(MODE_CBC/NoPadding)解密用Python加密的iOS文件

时间:2024-06-07 02:49:28

相关推荐

python混淆加密ios代码_用AES(MODE_CBC/NoPadding)解密用Python加密的iOS文件

我从Python中的服务器接收到一个以这种方式加密的文件:import os

from Crypto.Cipher import AES

from Crypto import Random

def pad(s):

return s + b"\0" * (AES.block_size - len(s) % AES.block_size)

def encrypt(message, key):

message = pad(message)

iv = Random.new().read(AES.block_size)

cipher = AES.new(key, AES.MODE_CBC, iv)

return iv + cipher.encrypt(message)

def encrypt_file(file_name, key):

with open("epub/" + file_name, 'rb') as fo:

plaintext = fo.read()

enc = encrypt(plaintext, key)

file_name = "enc/" + file_name

with open(file_name, 'wb') as fo:

fo.write(enc)

for list in os.listdir('./epub'):

if list.find('.epub') != -1:

key = '0123456789012345'

encrypt_file(list, key)

我的Android应用程序以这种方式解密文件:

^{pr2}$

现在。

我也会在iOS的应用程序中做同样的事情,但我是objective C的新手。

我无法更改服务器上的代码。

我尝试将RNCrypto用于iOS,但效果不佳。

有什么建议吗?

谢谢

编辑1

对不起。这是我在目标C中的代码。

我认为RNCryptor中的某些设置是错误的。在int blockSize = 16;

NSInputStream *cryptedStream = [NSInputStream inputStreamWithFileAtPath:@"epub.epub"];

NSOutputStream *decryptedStream = [NSOutputStream outputStreamToFileAtPath:@"epub_dec.epub" append:NO];

[cryptedStream open];

[decryptedStream open];

__block NSMutableData *data = [NSMutableData dataWithLength:blockSize];

__block RNEncryptor *decryptor = nil;

dispatch_block_t readStreamBlock = ^{

[data setLength:blockSize];

NSInteger bytesRead = [cryptedStream read:[data mutableBytes] maxLength:blockSize];

if (bytesRead < 0) {

}

else if (bytesRead == 0) {

[decryptor finish];

}

else {

[data setLength:bytesRead];

[decryptor addData:data];

NSLog(@"Sent %ld bytes to decryptor", (unsigned long)bytesRead);

}

};

decryptor = [[RNEncryptor alloc] initWithSettings:kRNCryptorAES256Settings

password:@"0123456789012345"

handler:^(RNCryptor *cryptor, NSData *data) {

NSLog(@"Decryptor recevied %ld bytes", (unsigned long)data.length);

[decryptedStream write:data.bytes maxLength:data.length];

if (cryptor.isFinished) {

[decryptedStream close];

}

else {

readStreamBlock();

}

}];

readStreamBlock();

编辑2

PKCS7和iv为0字节的Python代码。在from Crypto.Cipher import AES

from Crypto import Random

from pkcs7 import PKCS7Encoder

def pad(s):

encoder = PKCS7Encoder()

return encoder.encode(s)

#return s + b"\0" * (AES.block_size - len(s) % AES.block_size)

def encrypt(message, key):

message = pad(message)

#iv = Random.new().read(AES.block_size)

iv = b'0000000000000000'

cipher = AES.new(key, AES.MODE_CBC, iv)

return iv + cipher.encrypt(message)

def encrypt_file(file_name, key):

with open("epub/" + file_name, 'rb') as fo:

plaintext = fo.read()

enc = encrypt(plaintext, key)

file_name = "enc/" + file_name

with open(file_name, 'wb') as fo:

fo.write(enc)

key = '0123456789012345'

encrypt_file("epub1.epub", key)

decrypt_file("epub1.epub", key)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。