private string ModifyString( string?source, string?key, EncryptionModificationMethod modificationMethod) { VerifyModificationMethod(modificationMethod); if (string.IsNullOrEmpty(source) || string.IsNullOrEmpty(key)) { return(source ?? ""); } StringBuilder resultString = new StringBuilder(); for (int i = 0; i < source.Length; i++) { ushort sourceCharCode = Convert.ToUInt16(source[i]); ushort keyCharCode = Convert.ToUInt16(key[i % key.Length]); ushort resultCharCode; if (modificationMethod == EncryptionModificationMethod.Encrypt) { resultCharCode = (ushort)unchecked (sourceCharCode + keyCharCode); } else { resultCharCode = (ushort)unchecked (sourceCharCode - keyCharCode); } char resultCharacter = Convert.ToChar(resultCharCode); resultString.Append(resultCharacter); } return(resultString.ToString()); }
private void VerifyModificationMethod(EncryptionModificationMethod modificationMethod) { if (modificationMethod != EncryptionModificationMethod.Encrypt && modificationMethod != EncryptionModificationMethod.Decrypt) { throw new ArgumentException( "modifictionMethod parameter should be " + $"\"Encrypt\" or \"Decrypt\""); } }
private IEnumerable <string> ModifyCollection( IEnumerable <string>?source, string?key, EncryptionModificationMethod modificationMethod) { if (source == null || source.Count() == 0) { yield return(""); } else { int limitOfBufferLength = byte.MaxValue; var bufferSource = source.Take(limitOfBufferLength); foreach (string str in bufferSource) { yield return(ModifyString(str, key, modificationMethod)); } } }