/// <summary>
        /// Determines whether this string and a specified ObscuredString object have the same value. A parameter specifies the culture, case, and sort rules used in the comparison.
        /// </summary>
        ///
        /// <returns>
        /// true if the value of the <paramref name="value"/> parameter is the same as this string; otherwise, false.
        /// </returns>
        /// <param name="value">An ObscuredString to compare.</param><param name="comparisonType">A value that defines the type of comparison. </param><exception cref="T:System.ArgumentException"><paramref name="comparisonType"/> is not a <see cref="T:System.StringComparison"/> value. </exception><filterpriority>2</filterpriority>
        public bool Equals(ObscuredString value, StringComparison comparisonType)
        {
            if (value == null)
            {
                return(false);
            }

            return(string.Equals(InternalDecrypt(), value.InternalDecrypt(), comparisonType));
        }
        /// <summary>
        /// Determines whether this instance and another specified ObscuredString object have the same value.
        /// </summary>
        ///
        /// <returns>
        /// true if the value of the <paramref name="value"/> parameter is the same as this instance; otherwise, false.
        /// </returns>
        /// <param name="value">A ObscuredString. </param><filterpriority>2</filterpriority>
        public bool Equals(ObscuredString value)
        {
            if (value == null)
            {
                return(false);
            }

            if (currentCryptoKey == value.currentCryptoKey)
            {
                return(ArraysEquals(hiddenValue, value.hiddenValue));
            }

            return(string.Equals(InternalDecrypt(), value.InternalDecrypt()));
        }