gpt4 book ai didi

c# - 使用 Azure Key Vault 的 key 加密和解密文本

转载 作者:行者123 更新时间:2023-12-03 04:43:01 24 4
gpt4 key购买 nike

我正在尝试使用 Azure Key Vault 中的 key 来加密和解密 Web API 的 cookie。

对于加密过程,我在该类中使用 RSA:

    public class SimpleRSA
{
private RSA _rsa;

public SimpleRSA(RSA rsa)
{
_rsa = rsa;
}

public string EncryptAsync(string value)
{
var byteData = Encoding.Unicode.GetBytes(value);
var encryptedText = _rsa.Encrypt(byteData, RSAEncryptionPadding.OaepSHA1);
var encodedText = Convert.ToBase64String(encryptedText);
return encodedText;
}


public string DecryptAsync(string encryptedText)
{
var encryptedBytes = Convert.FromBase64String(encryptedText);
var decryptionResult = _rsa.Decrypt(encryptedBytes, RSAEncryptionPadding.OaepSHA1);
var decryptedText = Encoding.Unicode.GetString(decryptionResult);
return decryptedText;
}
}

我使用该代码从 key 中获取 RSA:

  public RSA GetRSA(string appId, string appSecret)
{
AuthenticationCallback callback = async (authority, resource, scope) =>
{
var authContext = new AuthenticationContext(authority);

var credential = new ClientCredential(appId, appSecret);
var authResult = await authContext.AcquireTokenAsync(resource, credential);
return authResult.AccessToken;
};

var client = new KeyVaultClient(callback);

var result = client.GetKeyAsync(_vaultBaseUrl, _keyId).Result;
var key = result.Key;

return key.ToRSA();
}

我从 Azure Key Vault 获取了 RSA,并成功加密了我的字符串。问题是当我尝试解密该值时。在这个过程中我得到了这个错误:

System.Security.Cryptography.CryptographicException: 'Error decoding OAEP padding.'

我认为这种情况可能会发生,因为我没有 RSA 中的私钥,但我尝试使用此方法来获取带有私钥的 RSA::

key.ToRSA(true);

enter image description here

但是遇到了这个错误:

enter image description here

所以,我不知道如何完成这个过程。还有其他方法可以做到这一点吗?或者出了什么问题?

最佳答案

如果您想使用 Azure Key Vault 来加密和解密文本,可以使用 SDK Azure.Security.KeyVault.Keys 来实现。

例如

  1. 安装 SDK
Install-Package Azure.Security.KeyVault.Keys -Version 4.0.3
Install-Package Azure.Identity -Version 1.1.1
  • 代码
  •           ClientSecretCredential clientSecretCredential = new ClientSecretCredential(tenantId, // your tenant id
    clientId, // your AD application appId
    clientSecret // your AD application app secret
    );

    //get key
    var KeyVaultName = "<your kay vault name>";
    KeyClient keyClient = new KeyClient(new Uri($"https://{KeyVaultName}.vault.azure.net/"), clientSecretCredential);;
    var keyName="<your key name>"
    var key = await keyClient.GetKeyAsync(keyName);

    // create CryptographyClient
    CryptographyClient cryptoClient = new CryptographyClient(key.Value.Id, clientSecretCredential);

    var str ="test"
    Console.WriteLine("The String used to be encrypted is : " +str );

    Console.WriteLine("-------------encrypt---------------");
    var byteData = Encoding.Unicode.GetBytes(str);
    var encryptResult = await cryptoClient.EncryptAsync(EncryptionAlgorithm.RsaOaep, byteData);
    var encodedText = Convert.ToBase64String(encryptResult.Ciphertext);
    Console.WriteLine(encodedText);

    Console.WriteLine("-------------dencrypt---------------");
    var encryptedBytes = Convert.FromBase64String(encodedText);
    var dencryptResult = await cryptoClient.DecryptAsync(EncryptionAlgorithm.RsaOaep, encryptedBytes);
    var decryptedText = Encoding.Unicode.GetString(dencryptResult.Plaintext);
    Console.WriteLine(decryptedText);

    enter image description here

    关于c# - 使用 Azure Key Vault 的 key 加密和解密文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61966417/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com