Description
The most convenient, simple & lightweight Swift 2 framework to encrypt / decrypt a string with AES-256 CBC encryption.
AES256CBC is meant as simple, stand-alone file to bring AES-256 Cipher Block Chaining encryption to any Swift 2 powered app without any friction or learning curve. It is used in multiple projects of SwiftyBeaver and was developed in cooperation with Marcin Krzyżanowski from CryptoSwift.
AES256CBC alternatives and similar libraries
Based on the "Cryptography" category.
Alternatively, view AES256CBC alternatives based on common mentions on social networks and blogs.
-
CryptoSwift
CryptoSwift is a growing collection of standard and secure cryptographic algorithms implemented in Swift -
RNCryptor
CCCryptor (AES encryption) wrappers for iOS and Mac in Swift. -- For ObjC, see RNCryptor/RNCryptor-objc -
SwiftShield
🔒 Swift Obfuscator that protects iOS apps against reverse engineering attacks. -
Themis
Easy to use cryptographic framework for data protection: secure messaging with forward secrecy and secure data storage. Has unified APIs across 14 platforms. -
IDZSwiftCommonCrypto
A wrapper for Apple's Common Crypto library written in Swift. -
JOSESwift
A framework for the JOSE standards JWS, JWE, and JWK written in Swift. -
BlueCryptor
Swift cross-platform crypto library using CommonCrypto/libcrypto -
Siphash
Simple and secure hashing in Swift with the SipHash algorithm -
BlueRSA
RSA public/private key encryption, private key signing and public key verification in Swift using the Swift Package Manager. Works on iOS, macOS, and Linux (work in progress). -
SweetHMAC
A tiny and easy to use Swift class to encrypt strings using HMAC algorithms.
Appwrite - The open-source backend cloud platform
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of AES256CBC or a related project?
README
AES256CBC Encryption for Swift 2, 3, 4 & 5
The most convenient & lightweight AES256 Encryption Framework for Swift 3, 4 & 5 which even works under Linux. For Swift 2 use tag 0.1.1.
Unique Feature Set
- Just a single file in pure Swift 4 & 5 source code
- Runs natively on iOS, macOS, tvOS & watchOS & Linux
- No additional dependencies or header files
- Maximum convenience for encrypting / decrypting of strings
- Built-in generating of compatible 32 character password
- Automatic string padding
- Automatic handling & embedding of a random initialisation vector
Please follow SwiftyBeaver on Twitter to stay up-to-date on new versions.
Requirements
- iOS 8.0+, macOS X 10.9+, tvOS 9+, watchOS 2+, Linux, Docker
- Xcode 7+
Installation
via Carthage
You can use Carthage to install AES256CBC by adding that to your Cartfile:
github "SwiftyBeaver/AES256CBC"
via CocoaPods
To use CocoaPods just add this to your Podfile:
pod 'AES256CBC'
via Swift Package Manager
To use AES256CBC as a Swift Package Manager package just add the following to your Package.swift file’s dependencies.
.Package(url: "https://github.com/SwiftyBeaver/AES256CBC.git")
or Download
- Download the latest release zip from here
- Drag & drop the
/sources
folder into your project (make sure "Copy items if needed" is checked) - Rename the "sources" group to "AES256CBC" if you'd like
Note: You don't have to import AES256CBC
if you install this way.
Usage
Example which encrypts and decrypts a string using a randomly generated 32 character password. In real-life you would add your own 32 character password instead.
import AES256CBC
let str = "My little secret"
let password = AES256CBC.generatePassword() // returns random 32 char string
// get AES-256 CBC encrypted string
let encrypted = AES256CBC.encryptString(str, password: password)
// decrypt AES-256 CBC encrypted string
let decrypted = AES256CBC.decryptString(encrypted!, password: password)
Run on Ubuntu with Docker
We ❤️ server-side Swift 3, 4 & 5 AES256CBC works under Linux. For Docker you can use the included Dockerfile or simple run test_in_docker.sh
which will create a self-removing docker container and runs test in them.
FAQs
Why do I get nil as result?
If anything goes wrong, most likely due to a password which is not 32 characters long, then encryptString()
and decryptString()
return nil.
What about the initial vector?
You don’t need to worry about the important initial vector which is required to make AES-256 much more secure. AES256CBC automatically generates a random initial vector for you and adds it to the start of the encrypted string. During decryption AES256CBC reads the first 16 characters of the encrypted string and uses them as initial vector to decrypt the remaining encrypted string.
Where is it used?
The framework is used in multiple projects of SwiftyBeaver and was developed in cooperation with Marcin Krzyżanowski from CryptoSwift.
Contact & Contribute
If you have questions please contact Sebastian via the dedicated SwiftyBeaver Twitter account. Feature requests or bugs are better reported and discussed as Github Issue.
Please contribute back any great stuff, especially bugfixes & security issues! Each new bugfix, feature request or addition/change should be put in a dedicated pull request to simplify discussion and merging.
Thanks for testing, sharing, staring & contributing!
License
AES256CBC is released under the MIT License. The core crypto logic is a tailored version of CryptoSwift written by Marcin Krzyżanowski, please read & respect his license which can be found in the middle of the file AES256CBC.swift, too.
*Note that all licence references and agreements mentioned in the AES256CBC README section above
are relevant to that project's source code only.