首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AES加密技术的问题(特别是使用CryptoSwift加密和使用PyCryptodome解密

AES加密技术的问题(特别是使用CryptoSwift加密和使用PyCryptodome解密
EN

Stack Overflow用户
提问于 2019-08-03 02:02:07
回答 1查看 205关注 0票数 2

我目前正在尝试使用AES密码术来加密和解密长度始终为9个字符的字符串。我正在尝试做的是在swift中加密字符串,然后在python中解密加密的字符串。我使用AES加密与CryptoSwift和解密与PyCryptodome。

这是我在swift中的函数:

代码语言:javascript
复制
import CryptoSwift
func crypto_testing() {
        print("Cryptography!")

        let ivString = "0000000000000000"
        let keyString = "This is a key123"

        let key = [UInt8](keyString.utf8)
        let iv = [UInt8](ivString.utf8)
        let stringToEncrypt = "123456789"


        let enc = try! aesEncrypt(stringToEncrypt: stringToEncrypt, key: key, iv: iv)
        print("ENCRYPT:",enc)
    }


    func aesEncrypt(stringToEncrypt: String, key: Array<UInt8>, iv: Array<UInt8>) throws -> String {
        let data = stringToEncrypt.data(using: String.Encoding.utf8)
        let encrypted = try AES(key: key, blockMode: CFB(iv: iv), padding: .noPadding).encrypt((data?.bytes)!)
        return encrypted.toHexString() //result
    }

我从运行crypto_testing函数得到的结果是:

代码语言:javascript
复制
Cryptography!
ENCRYPT: 5d02105a49e55d2ff7

此外,这是我的解密函数在python中的样子:

代码语言:javascript
复制
import binascii
from Crypto.Cipher import AES

KEY = b'This is a key123'
IV = b'0000000000000000'
MODE = AES.MODE_CFB

def decrypt(key, iv, encrypted_text):
    aes = AES.new(key, MODE, iv)
    encrypted_text_bytes = binascii.a2b_hex(encrypted_text)
    decrypted_text = aes.decrypt(encrypted_text_bytes)
    return decrypted_text

decrypted_text = decrypt(KEY, IV, encrypted_text)
print(decrypted_text)

将加密消息插入解密函数的结果如下:

代码语言:javascript
复制
>>> decrypt(b'This is a key123', b'0000000000000000', '5d02105a49e55d2ff7')

b'1%\xdc\xc8\xa0\r\xbd\xb8\xf0' 

如果有人对这里出了什么问题有任何线索,那将是一个很大的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-08-03 02:33:58

试试这个:

代码语言:javascript
复制
let stringToEncrypt = "123456789"

var aes: AES

var encrypted: [UInt8]

do {

aes = try AES(key: key, blockMode: CBC(iv: iv), padding: . noPadding)

 encrypted = try aes.encrypt(stringToEncrypt.bytes)

}

let base64Encypted = encrypted.toBase64()```
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57331472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档