Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IOS Swift3 DES、ECB、填充加密_Ios_Swift - Fatal编程技术网

IOS Swift3 DES、ECB、填充加密

IOS Swift3 DES、ECB、填充加密,ios,swift,Ios,Swift,下面是我的android java代码,实际上如何在IOS Swift3中编写 final SecretKey key = new SecretKeySpec(keyBytes, "DESede"); final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); final byte[] cipherText = cipher.d

下面是我的android java代码,实际上如何在IOS Swift3中编写

 final SecretKey key = new SecretKeySpec(keyBytes, "DESede");

 final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");

 cipher.init(Cipher.ENCRYPT_MODE, key);

 final byte[] cipherText = cipher.doFinal(plainTextBytes);

在此查找AES或DES通用加密示例,并根据需要对3DES进行更改。确保密钥为24字节

更改:

  • 算法:
    CCAlgorithm3DES
  • 模式:
    kCCModeECB
  • 选项:
    ccPKCS7Padding
如果密钥为16字节,则为两个密钥3DES,复制前8个字节并将其附加到密钥末尾,以创建一个24字节的密钥

注:
desed
称为3DES或三重DES

3DES确实不安全,尤其是2键3DES。如果可能,使用随机IV更新AES-CBC

这是未经测试的Swift 3(也应与Swift4配合使用)代码,请注意上面关于密钥长度的警告:

func trippleDESCrypt(data:Data, keyData:Data, ivData:Data, operation:Int) -> Data? {
    let cryptLength = size_t(data.count + kCCBlockSize3DES)
    var cryptData = Data(repeating:0, count:cryptLength)
    var numBytesEncrypted :size_t = 0

    let keyLength             = keyData.count
    let algoritm: CCAlgorithm = UInt32(kCCAlgorithm3DES)
    let options:  CCOptions   = UInt32(kCCOptionPKCS7Padding | kCCModeECB)

    let cryptStatus = cryptData.withUnsafeMutableBytes {cryptBytes in
        data.withUnsafeBytes {dataBytes in
            ivData.withUnsafeBytes {ivBytes in
                keyData.withUnsafeBytes {keyBytes in
                    CCCrypt(CCOperation(operation),
                            algoritm,
                            options,
                            keyBytes, keyLength,
                            ivBytes,
                            dataBytes, data.count,
                            cryptBytes, cryptLength,
                            &numBytesEncrypted)
                }
            }
        }
    }

    if UInt32(cryptStatus) == UInt32(kCCSuccess) {
        cryptData.count = numBytesEncrypted
    }
    else {
        print("Error: \(cryptStatus)")
        return nil
    }

    return cryptData
}
通常,您需要有一个包含导入的桥接头文件:

#import <CommonCrypto/CommonCrypto.h>

3DES-ECB(DESede是3DES)确实不安全,尤其是2键3DES。如果在所有可能的更新到AES-CBC与随机IV。真的很好的答案!!!最后我得到了正确的加密值!!!但我将“kCCModeECB”改为“kCCOptionECBMode”。
Security.framework.