| about | help | code help+videos | done | prefs | 
orion.a.smith@gmail.com apcsa-encryption
Description:Encryption-based problems with String data
These methods represent ways to encrypt or decrypt text, either using the String methods or by considering characters individually. Many of these problems will require knowledge of arrays and ArrayLists, and some near the end use specialized Java classes which they will introduce to you.
Some other very handy bits to know how to use: Character.isLetter, Character.isDigit, Character.isUpperCase, Character.isLowerCase, Math.max, Math.min, Math.ceil, Math.floor, and a really solid understanding of the remainder operator (%). Also typecasting back and forth between char and int. You can turn a String s into an array of chars using s.toCharArray(), and you can construct a String from a char array called chars with new String(chars).
--------------------------------------
Section 1: Pre-digital encryption schemes
--------------------------------------
Algorithms in this section represent some of the basic, even trivial encryption schemes that have been used for hundreds of years. Most of these are based on substitution and transposition ciphers, although many classical schemes also involve simple, reversible math with characters or groups of characters.
Substitution by letter or keys
These range from easy to moderate.
EASY: 
apcsaEncryptIntToChar  
apcsaEncryptToAlphaNums  
apcsaDecryptFromAlphaNums  
MEDIUM: 
apcsaAtbashCipher  
apcsaEncryptSubstitutionKey  
apcsaEncryptHomophonicCipher  
apcsaDecryptHomophonicCipher 
Code word lists
EASY: 
apcsaFindFirstCodeword 
MEDIUM: 
apcsaExtractHiddenWords  
apcsaExtractHiddenWordsWhole  
apcsaExcludeHiddenWords 
HARD: 
apcsaExcludeHiddenWordsHard  
apcsaDecryptRotateSort 
Anagrams
EASY: 
apcsaIsAnagram 
MEDIUM: 
apcsaCountAnagrams  
apcsaIndexOfAnagram  
HARD: 
apcsaFindStretchedAnagrams 
One-dimensional transposition
EASY: 
apcsaEncryptRotatePositions 
MEDIUM: 
apcsaEncryptPairSwap  
apcsaEncryptMod  
apcsaDecryptMod  
apcsaEncryptRotateEvens  
apcsaEncryptRearrangeWords  
apcsaDecryptRearrangeWords  
apcsaEncryptCycleBits 
Math-based substitution
These problems start easy, but the last two are really hard.
EASY: 
apcsaEncryptCaesarChar  
apcsaEncryptCaesarString  
apcsaEncryptCaesarCharKey  
apcsaEncryptCaesarStringKey  
apcsaEncryptCaesarStringPassword  
MEDIUM: 
apcsaEncryptDifferences  
apcsaDecryptDifferences  
apcsaEncryptXor  
apcsaDecryptXor  
HARD: 
apcsaEncryptSumModulus  
apcsaDecryptSumModulusWithHint 
Two-dimensional transposition
Warning, these can be challenging.
HARD: 
apcsaEncryptRailFence  
apcsaDecryptRailFence  
apcsaEncryptColumnarCipher  
apcsaDecryptColumnarCipher 
Tools used to break substitution ciphers
MEDIUM: 
apcsaEncryptHighestFrequency  
apcsaMostCommonWord 
--------------------------------------
Section 2: Modern encryption-adjacent tools
--------------------------------------
Hashing algorithms
These algorithms are basic introductions to hashing, which converts a large amount of data into a smaller, often fixed amount of data. Hashing is not encryption because it is not (should not be) a reversible process. But, it's frequently used for verification of data including sensitive data such as passwords. These problems will hopefully improve your ability to consider characters as numbers in a variety of ways.
EASY: 
apcsaHashSumLetters  
apcsaHashSumString  
MEDIUM: 
apcsaHashArraySumString  
apcsaHashCaesarString  
apcsaHashStringToArray  
apcsaHashStringCollisions 
--------------------------------------
Section 3: Public key encryption
--------------------------------------
Public key encryption is the way modern cryptography secures communication through mathematics. While the numbers you will be dealing with are manageable, the techniques developed here are completely real and could be used with only minor modifications to provide strong security. These problems are pretty tough and come with a lot of explanation. The code to complete them isn't long, but understanding what you are doing (and why) can be challenging.
MEDIUM: 
apcsaEncryptStringToBlocks  
HARD: 
apcsaEncryptCoprimes  
apcsaEncryptPublicKey  
apcsaEncryptBruteForceAttack  
apcsaEncryptPublicKeyBlocks  
apcsaEncryptFindPrivateKey  
apcsaDecryptPublicKeyChars 
Authoring docs
Copyright Nick Parlante 2017 - privacy