diff --git a/Pilz.Cryptography/SecureString.cs b/Pilz.Cryptography/SecureString.cs index 54654c5..56b3a65 100644 --- a/Pilz.Cryptography/SecureString.cs +++ b/Pilz.Cryptography/SecureString.cs @@ -11,20 +11,19 @@ namespace Pilz.Cryptography public class SecureString { public static ICrypter DefaultCrypter { get; set; } - - [JsonIgnore] public ICrypter Crypter { get; set; } - - [JsonProperty] public string EncryptedValue { get; set; } - - [JsonIgnore] public string Value { - get => GetCrypter().Decrypt(EncryptedValue); + get => GetCrypter()?.Decrypt(EncryptedValue); set => EncryptedValue = GetCrypter().Encrypt(value); } + [JsonConstructor] + private SecureString(JsonConstructorAttribute dummyAttribute) + { + } + public SecureString() : this(string.Empty, true) { @@ -73,7 +72,7 @@ namespace Pilz.Cryptography public static implicit operator string(SecureString value) => value?.Value; public static implicit operator SecureString(string value) => new SecureString(value, false); - public static bool operator ==(SecureString left, SecureString right) => left.EncryptedValue == right.EncryptedValue; - public static bool operator !=(SecureString left, SecureString right) => left.EncryptedValue != right.EncryptedValue; + public static bool operator ==(SecureString left, SecureString right) => left?.EncryptedValue == right?.EncryptedValue; + public static bool operator !=(SecureString left, SecureString right) => left?.EncryptedValue != right?.EncryptedValue; } } diff --git a/Pilz.Cryptography/SecureStringJsonConverter.cs b/Pilz.Cryptography/SecureStringJsonConverter.cs index 8a1f1f0..3d4a2ab 100644 --- a/Pilz.Cryptography/SecureStringJsonConverter.cs +++ b/Pilz.Cryptography/SecureStringJsonConverter.cs @@ -22,12 +22,13 @@ namespace Pilz.Json.Converters var idString = serializer.Deserialize(reader); SecureString id; - if (existingValue is object) + if (existingValue is SecureString) + { id = (SecureString)existingValue; + id.EncryptedValue = idString; + } else - id = new SecureString(); - - id.EncryptedValue = idString; + id = new SecureString(idString, true); return id; } diff --git a/Pilz.Cryptography/SimpleStringCrypter.cs b/Pilz.Cryptography/SimpleStringCrypter.cs index 90df652..97a2da9 100644 --- a/Pilz.Cryptography/SimpleStringCrypter.cs +++ b/Pilz.Cryptography/SimpleStringCrypter.cs @@ -35,10 +35,13 @@ namespace Pilz.Cryptography byte[] bytes = TextEncoding.GetBytes(key); byte[] array = sha1CryptoServiceProvider.ComputeHash(bytes); - var output = new byte[checked(length - 1 + 1)]; - array.CopyTo(output, 0); + var output = new byte[length]; + var lowerLength = Math.Min(array.Length, output.Length); + + for (int i = 0; i < lowerLength; i++) + output[i] = array[i]; - return array; + return output; } private string EncryptData(string plaintext) @@ -63,7 +66,7 @@ namespace Pilz.Cryptography public string Encrypt(string plainValue) { - return EncryptData(plainValue); + return EncryptData(plainValue ?? string.Empty); } public string Decrypt(string encryptedValue)