ChilkatHOMEAndroid™Classic ASPCC++C#Mono C#.NET Core C#C# UWP/WinRTDataFlexDelphi ActiveXDelphi DLLVisual FoxProJavaLianjaMFCObjective-CPerlPHP ActiveXPHP ExtensionPowerBuilderPowerShellPureBasicCkPythonChilkat2-PythonRubySQL ServerSwift 2Swift 3/4TclUnicode CUnicode C++Visual Basic 6.0VB.NETVB.NET UWP/WinRTVBScriptXojo PluginNode.jsExcelGo

# (Swift 3/4) PBES2 Password-Based Encryption (PBE)

Demonstrates how to implement password-based encryption according to the PKCS #5 v2.0: Password-Based Cryptography Standard (published by RSA Laboratories). This example uses PBES2, which ise based on the PBKDF2 function and an underlying block cipher such as RC2, DES, etc.

```func chilkatTest() {
let crypt = CkoCrypt2()!

var success: Bool = crypt.unlockComponent("Anything for 30-day trial")
if success != true {
print("\(crypt.lastErrorText!)")
return
}

//  Set properties for PBES2 encryption:

crypt.cryptAlgorithm = "pbes2"

//  Set the underlying PBE algorithm (and key length):
crypt.pbesAlgorithm = "rc2"
crypt.keyLength = 128
//  Only required for the RC2 algorithm:
crypt.rc2EffectiveKeyLength = 128

//  By definition, the block encryption algorithm (RC2 or whichever
//  was selected) will run in CBC mode.  Therefore, we need
//  an IV.  The IV is equal in length to the block size of the
//  algorithm.  RC2 has a block size of 8 bytes (regardless of
//  key length), so set the IV to some value that is 8 bytes
//  in length:
crypt.setEncodedIV("0000000000000000", encoding: "hex")

//  Give it some salt:
crypt.setEncodedSalt("0102030405060708", encoding: "hex")

//  A higher iteration count makes the algorithm more
//  computationally expensive and therefore exhaustive
//  searches (for breaking the encryption) is more difficult:
crypt.iterationCount = 1024

//  A hash algorithm needs to be set for PBES2:
crypt.hashAlgorithm = "sha1"

//  Indicate that the encrypted bytes should be returned
//  as a hex string:
crypt.encodingMode = "hex"

var plainText: String? = "To be encrypted."

var encryptedText: String? = crypt.encryptStringENC(plainText)

print("\(encryptedText!!)")

//  Now decrypt:
var decryptedText: String? = crypt.decryptStringENC(encryptedText)

print("\(decryptedText!!)")

}

```