Caesar CipherImplement the Caesar cipher. Use utf8 and UnicodeScalar to shift character values.
This page was last reviewed on Aug 23, 2023.
Caesar cipher. In a Caesar cipher, all letters are shifted by a certain number of places. Then the characters are wrapped to fit within the alphabetical range.
In Swift 5.8, we can loop over integer values in a string with utf8. And with UnicodeScalar we can shift those characters into the desired range.
Example implementation. This code introduces the caesar() method. It accepts a String and a "shift" Int. And it returns a String.
Start We create an empty Character array. This is where we append() our shifted chars as we compute them.
Next We use an if-statement to test whether the value exceeds a lowercase "z." If so we shift it backwards.
Tip We use the UnicodeScalar type to convert an integer value (based on an arithmetic expression) back into a Character.
Convert Int to Character
Finally We return a new string based on the characters we added in the Character array. This is the result of caesar().
func caesar(value: String, shift: Int) -> String { // Empty character array. var result = [Character]() // Loop over utf8 values. for u in value.utf8 { // Apply shift to UInt8. let s = Int(u) + shift // See if value exceeds Z. // ... The Z is 26 past "A" which is 97. // ... If greater than "Z," shift backwards 26. // ... If less than "A," shift forward 26. if s > 97 + 25 { result.append(Character(UnicodeScalar(s - 26)!)) } else if s < 97 { result.append(Character(UnicodeScalar(s + 26)!)) } else { result.append(Character(UnicodeScalar(s)!)) } } // Return String from array. return String(result) } // Test Caesar cipher on this string. let value1 = "test" print(value1) let value2 = caesar(value: value1, shift: 18) let value3 = caesar(value: value2, shift: -18) print("\(value2) \(value3)") let value4 = caesar(value: value1, shift: 1) let value5 = caesar(value: value4, shift: -1) print("\(value4) \(value5)") let value6 = "exxegoexsrgi" let value7 = caesar(value: value6, shift: -4) print("\(value6) \(value7)")
test lwkl test uftu test exxegoexsrgi attackatonce
Some notes. A Caesar cipher is a more general form of the ROT13 algorithm. In it we rotate characters any number of places, not just 13 places as in ROT13. These ciphers have limited use.
A review. The Caesar cipher is not a good form of encryption. It only obfuscates text. But it can help us learn how to manipulate characters with their underlying integral values.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Aug 23, 2023 (edit).
© 2007-2023 Sam Allen.