一胀屿、 Swift AES ECB Padding .pkcs7 加密解密,密鑰字節(jié)數(shù)不夠16位補(bǔ)全:
// AES加密
internal func aes_encrypt(_ str:String, _ aes_key:String) -> String{
//AES ECB Padding pkcs7需要密鑰長(zhǎng)度16字節(jié)倍數(shù),此處為不夠16位補(bǔ)全
var keyBytes = aes_key.bytes
let letter = 0x00
let diffByteNum = 16 - keyBytes.count
if diffByteNum > 0 {
for _ in 0..<diffByteNum {
keyBytes.append(UInt8(letter))
}
}
var encryptedStr = ""
do {// AES encrypt
let encrypted = try AES(key: keyBytes, blockMode: ECB(), padding: .pkcs7).encrypt(str.bytes);
let data = Data(base64Encoded: Data(encrypted), options: .ignoreUnknownCharacters)
//加密結(jié)果從data轉(zhuǎn)成string 轉(zhuǎn)換失敗 返回""
encryptedStr = String(bytes: data!.bytes, encoding: .utf8) ?? ""
} catch {
print(error.localizedDescription)
}
return encryptedStr
}
// AES解密
internal func aes_decrypt(_ str:String , _ aes_key:String) -> String{
//decode base64
let data = Data(base64Encoded: str, options: .ignoreUnknownCharacters)!
//AES ECB Padding pkcs7需要密鑰長(zhǎng)度16字節(jié)倍數(shù),此處為不夠16位補(bǔ)全
var keyBytes = aes_key.bytes
let letter = 0x00
let diffByteNum = 16 - keyBytes.count
if diffByteNum > 0 {
for _ in 0..<diffByteNum {
keyBytes.append(UInt8(letter))
}
}
var decrypted: [UInt8] = []
do {
// decode AES
decrypted = try AES(key: keyBytes, blockMode: ECB(), padding: .pkcs7).decrypt(data.bytes);
} catch {
print(error.localizedDescription)
}
//解密結(jié)果從data轉(zhuǎn)成string 轉(zhuǎn)換失敗 返回""
return String(bytes: Data(decrypted).bytes, encoding: .utf8) ?? ""
}