srilekhamenon Ответов: 2

Проблема при загрузке зашифрованного файла с amazon S3


я пытаюсь загрузить зашифрованный файл с amazon, но получаю ошибку

Система.Безопасность.Криптография.CryptographicException был пойман
Значение HRESULT=-2146233296
Сообщение=расшифровка значения требует, чтобы ключ был установлен на объекте алгоритма.

Что я уже пробовал:

cloudEncryptS3 = new cAmazonS3();
                        cloudEncryptS3.cAmazonEncryptS3(cloudAccountObj.AccountId, cloudAccountObj.SecretKey, cloudAccountObj.IsSSL == Constants.CONSTANT_ONE ? true : false, item.EncryptAlgoName, item.EncryptAlgoValue);

			request = new GetObjectRequest
                        {
                            BucketName = bucketName,
                            Key = keyName
                        };
                        

                        try
                        {
                            response = encryptClient.GetObject(request);
                        }
                        catch (Exception ex)
                        {
                            cGlobalSettings.oLogger.WriteLogException("| S3Progress.cs::DownLoadS3File() |", ex);



    public void cAmazonEncryptS3(string accessKey, string secretKey, bool IsSSL, string algoName, int algoValue)
        {
            encryptClient = null;
            AmazonS3CryptoConfiguration config = null;
            EncryptionMaterials encryp = null;
            Aes aesObj = null;
            DES desObj = null;
            TripleDES desTripleObj = null;
            RC2 rcObj = null;
            try
            {
                config = new AmazonS3CryptoConfiguration
                {
                    ServiceURL = "https://s3.amazonaws.com",
                    UseHttp = IsSSL,
                    StorageMode = CryptoStorageMode.ObjectMetadata
                };
                if (algoName.ToLower().Contains("aes"))
                {

                    aesObj = Aes.Create();
                    aesObj.BlockSize = algoValue;
                    encryp = new EncryptionMaterials(aesObj);
                }
                else if (algoName.ToLower().Contains("des"))
                {
                    if (algoValue == 64)
                    {
                        desObj = DES.Create();
                        desObj.BlockSize = algoValue;
                        encryp = new EncryptionMaterials(desObj);
                    }
                    else
                    {
                        desTripleObj = TripleDES.Create();
                        desTripleObj.BlockSize = algoValue;
                        encryp = new EncryptionMaterials(desTripleObj);
                    }
                }
                else if (algoName.ToLower().Contains("rc"))
                {
                    rcObj = RC2.Create();
                    rcObj.BlockSize = algoValue;
                    encryp = new EncryptionMaterials(rcObj);
                }
                else
                {
                    aesObj = Aes.Create();
                    aesObj.BlockSize = 128;
                    encryp = new EncryptionMaterials(aesObj);
                }

                encryptClient = new AmazonS3EncryptionClient(accessKey, secretKey, config, encryp);
            }
            catch (Exception ex)
            {
                cGlobalSettings.oLogger.WriteLogException("cAmazonS3.cs::cAmazonEncryptS3()", ex);
            }
            finally
            {
                config = null;
                encryp = null;
                aesObj = null;
                desObj = null;
                desTripleObj = null;
                rcObj = null;
            }
        }                    }

2 Ответов

Рейтинг:
2

Patrice T

Сообщение довольно явное!

Цитата:
Система.Безопасность.Криптография.CryptographicException был пойман
Значение HRESULT=-2146233296
Сообщение=расшифровка значения требует, чтобы ключ был установлен на объекте алгоритма.
Чего ты здесь не понимаешь ?

Decrypting a value requires that a key be set on the algorithm object

Говорит вам, что вам нужно предоставить ключ расшифровки.

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


srilekhamenon

иам уже оказывает accesskey и SecretKey

Patrice T

Может быть, вам стоит ознакомиться с документацией ?
вам говорят, что ключ пропал!