Обнаружить IsEncryptedString?

Как мы можем найти, что данная строка является зашифрованной или простой строкой?

честно говоря, вот и весь вопрос. Например, когда я использую защиту данных с использованием шифрования DPAPI, когда данная строка уже является зашифрованной строкой или может быть до дешифрования вызова, проверьте, зашифрована ли данная строка.

 "ConnectionStrings": {
    "DefaultConnection": "Server=SQL2014;Database=TestDb;Trusted_Connection=false;User Id=test;Password=test@123;MultipleActiveResultSets=true"
  }

Конфигурация для защиты данных

public void ConfigureServices(IServiceCollection services)
    {
        var dataProtectionBuilder = services.AddDataProtection().SetApplicationName("TestDataProtection");
        dataProtectionBuilder.PersistKeysToFileSystem(new System.IO.DirectoryInfo(@"F:\Test Data\TestDPAPI"));
        //Configuration goes here
        dataProtectionBuilder.AddKeyManagementOptions(options =>
        {
            options.AutoGenerateKeys = true;
            options.NewKeyLifetime = TimeSpan.FromMinutes(1);
        });

        dataProtectionBuilder.ProtectKeysWithDpapi(true);//Scope to LocalMachine (default Scope.CurrentUser)
        dataProtectionBuilder.SetDefaultKeyLifetime(TimeSpan.FromMinutes(1));
        dataProtectionBuilder.UseCryptographicAlgorithms(new Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.AuthenticatedEncryptionSettings
        {
            EncryptionAlgorithm = Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.EncryptionAlgorithm.AES_256_GCM,
            ValidationAlgorithm = Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ValidationAlgorithm.HMACSHA512
        });
    }

Сервис будет выглядеть примерно так

public class TestClass
    {
        IDataProtector dataProtector;
        public TestClass(IDataProtectionProvider dataProtectorProvider)
        {
            this.dataProtector = dataProtectorProvider.CreateProtector("purpose");
        }

        private string Protect(string value)
        {
           return dataProtector.Protect(value);
        }
        private string UnProtect(string value)
        {           
            return IsProtected(value)? dataProtector.Unprotect(value):value;
        }
        private bool IsProtected(string value)
        {
            //TODO How can we find 
            return false;
        }
    }

2 ответа

Решение

Если данные неотличимы от случайных байтов, они, вероятно, зашифрованы.
Если есть шаблоны, они не зашифрованы.

Обратите внимание, что зашифрованные данные могут быть закодированы с помощью Base64, шестнадцатеричного или другого кодирования, в этом случае необходимо декодировать перед проверкой на случайность.

Я, честно говоря, не знаком с DDAPI. Общий ответ, хотя, поскольку это общий вопрос...

Строка - это просто часть данных. Невозможно узнать, является ли он ненужным (зашифрованным) или нет (расшифрованным), не зная, что искать, то есть какой-то контекст или индикатор, который вы всегда знаете, чтобы искать. Я бы посоветовал вам зашифровать свои данные (свою строку), а затем подписать. В 'isprotected' попробуйте проверить подпись. Если он подтвердит, вы будете знать, что вам нужно расшифровать его, и это из надежного источника.

https://blogs.msdn.microsoft.com/alejacma/2008/06/25/how-to-sign-and-verify-the-signature-with-net-and-a-certificate-c/

Другие вопросы по тегам