当前位置: 首页 > 知识库问答 >
问题:

使用Azure Key Vault RSA密钥对字符串进行加解密

张溪叠
2023-03-14

我设置了Azure密钥库来检索RSA密钥进行加密。Azure发送给我一个KeyBundle类型的对象。此对象包含一个大小为2048的RSA类型的JsonWebKey。查看我的RSA密钥,它有两个方法,称为Encrypt(byte[]data,RSAEncryptionPadding padding)Decrypt(byte[]data,RSAEncryptionPadding padding)。现在我正在尝试加密和解密一个简单的字符串,如下所示:

public EncryptionManager(KeyBundle encryptionKey)
{
    string test = "Hello World!";
    var key = encryptionKey.Key.ToRSA();
    var encryptedString = key.Encrypt(Encoding.UTF8.GetBytes(test), RSAEncryptionPadding.OaepSHA256);
    var decryptedString = key.Decrypt(encryptedString, RSAEncryptionPadding.OaepSHA256);
}

在System.Security.Cryptography.RSAImplementation.RSACNG.EncryptorDecrypt(SafeEncryptKeyHandle密钥,ReadOnlySpan`1输入,AsymmetricPaddingMode paddingMode,void*paddingInfo,Boolean encrypt)在System.Security.Cryptography.RSAImplementation.RSACNG.EncryptorDecrypt(字节[]数据,RSAEncryptionPadding填充,Boolean encrypt)在

我对密码算法真的不太熟悉。我的问题是:我如何使用Azure提供的这个RSA密钥加密和解密一个简单的strig?

谢谢!

共有1个答案

沙富
2023-03-14

我得到了同样的问题,我所做的是在这里,虽然我从互联网上搜索并从微软文档中得到了这个

下面是我的工作代码

public static class KeyVaultEncryptorDecryptor
{
    public static string KeyDecryptText(this string textToDecrypt , KeyVaultClient keyVaultClient, string keyidentifier)
    {
        var kv = keyVaultClient;
        try
        {
            var key = kv.GetKeyAsync(keyidentifier).Result;
            var publicKey = Convert.ToBase64String(key.Key.N);
            using var rsa = new RSACryptoServiceProvider();
            var p = new RSAParameters() {
                Modulus = key.Key.N, Exponent = key.Key.E
            };
            rsa.ImportParameters(p);
            var encryptedTextNew = Convert.FromBase64String(textToDecrypt);
            var decryptedData = kv.DecryptAsync(key.KeyIdentifier.Identifier.ToString(), JsonWebKeyEncryptionAlgorithm.RSAOAEP, encryptedTextNew).GetAwaiter().GetResult();
            var decryptedText = Encoding.Unicode.GetString(decryptedData.Result);
            return decryptedText;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return default;
        }
    }

    public static string KeyEncryptText(this string textToEncrypt , KeyVaultClient keyVaultClient, string keyidentifier)
    {
        var kv = keyVaultClient;
        try
        {
            var key = kv.GetKeyAsync(keyidentifier).GetAwaiter().GetResult();
            var publicKey = Convert.ToBase64String(key.Key.N);
            using var rsa = new RSACryptoServiceProvider();
            var p = new RSAParameters() {
                Modulus = key.Key.N, Exponent = key.Key.E
            };
            rsa.ImportParameters(p);
            var byteData = Encoding.Unicode.GetBytes(textToEncrypt);
            var encryptedText = rsa.Encrypt(byteData, true);
            string encText = Convert.ToBase64String(encryptedText);
            return encText;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);
            return default;
        }
    }

}

 类似资料:
  • 本文向大家介绍Java对字符串进行加密解密,包括了Java对字符串进行加密解密的使用技巧和注意事项,需要的朋友参考一下 要求:    *  对用户输入的每个字符的值进行加密,将解密后的字符串输出    *  对用户输入的已加密字符串进行解密并输出 实现代码: 运行结果: *加密过程: 请输入一个英文字符串或揭秘字符串: I Love You 加密或者解密之后的结果如下: 乩一乬乏乖久一乹乏乕 *解

  • 我的问题是对称解密。而不是非对称解密。所以正确的答案是在这里只在Java中用密码短语解密PGP加密的文件 我使用gpg加密“Hello”:

  • 问题内容: 但只有3个参数。我需要一种方法来做这样的事情: 问题答案: 通常,您不需要为具有确定性行为的算法生成随机数的对象。此外,在使用ECB块模式时,您不需要IV,这是Java默认设置。确切地说,Java默认为中的for 。 因此,您应该可以使用如下代码: 现在看起来好多了。我已使用Apache Commons编解码器解码十六进制字符串。 请注意,您需要保存与和你有没有包括完整性保护,如MAC

  • 这里我的主要目标是在客户端和服务器上交换公钥。然后使用它们通过加密相互发送消息,另一个使用其私钥解密。现在,我已经在客户端和服务器上用c生成了rsa密钥对,获得了字符串格式的公钥和私钥,并交换了它们,但我不知道如何使用它们来加密消息。请帮忙。这是我的客户代码: }

  • 我正在尝试将我的应用程序从128位AES密钥升级为256位AES。然而,当我将第54行从128更改为256时,我会得到以下密钥大小错误。 java.security.无效密钥异常: 非法的密钥大小 我已正确安装了JCE文件,我的应用程序生成较长的密钥这一事实证明了这一点。 我在其他文章中看到过“AES / CBC / PKCS7Padding”加密方法,但这只会让我遇到这个例外: