【问题标题】:C# UWP CryptographicEngine.Encrypt() returns nullC# UWP CryptographicEngine.Encrypt() 返回 null
【发布时间】:2018-04-23 16:15:36
【问题描述】:

我尝试将输入字节[] 加密为 AES,但最终加密缓冲区为空。

private byte[] Encrypt(byte[] data)
{
    byte[] secretKey = new byte[] { 1, 2, 3 };

    IBuffer key = Convert.FromBase64String(Convert.ToBase64String(secretKey.ToArray()).ToString()).AsBuffer();
    Debug.WriteLine(key.Length);
    SymmetricKeyAlgorithmProvider algorithmProvider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbc);
    CryptographicKey cryptographicKey = algorithmProvider.CreateSymmetricKey(key);
    IBuffer bufferEncrypt = CryptographicEngine.Encrypt(cryptographicKey, data.AsBuffer(), null);

    return bufferEncrypt.ToArray();
}

调试器将局部变量显示为(名称、值、类型):

+       this    {Project.Auth}  Project.Auth
+       data    {byte[15]}  byte[]
    bufferEncrypt   null    Windows.Storage.Streams.IBuffer
+       cryptographicKey    {Windows.Security.Cryptography.Core.CryptographicKey}   Windows.Security.Cryptography.Core.CryptographicKey
+       key {System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBuffer}    Windows.Storage.Streams.IBuffer {System.Runtime.InteropServices.WindowsRuntime.WindowsRuntimeBuffer}
+       algorithmProvider   {Windows.Security.Cryptography.Core.SymmetricKeyAlgorithmProvider}  Windows.Security.Cryptography.Core.SymmetricKeyAlgorithmProvider
+       SecretKey   Count = 16  System.Collections.Generic.List<byte>

我的错在哪里?

【问题讨论】:

    标签: c# encryption uwp aes encryption-symmetric


    【解决方案1】:

    我什至无法在我这边成功运行您的代码 sn-p,CreateSymmetricKey(key) 时会抛出异常System.ArgumentException: 'Value does not fall within the expected range.。您的密钥似乎长度错误,根据您需要的安全性,密钥长度应该是一定数量的位长。 (AES 的 256 位很常见)。

    此外,CBC 算法需要一个初始化向量,您可以为该向量分配一个随机数。更多详情请参考Symmetric keys

    请按照official samplethis example 尝试解决您的问题并实施加密功能。

    【讨论】:

    • 谢谢,我把代码改成了:string aesKey = Convert.ToBase64String(secretKey); IBuffer key = Convert.FromBase64String(aesKey).AsBuffer(); SymmetricKeyAlgorithmProvider algorithmProvider = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCbc); CryptographicKey ckey = algorithmProvider.CreateSymmetricKey(key); IBuffer buffEncrypt = CryptographicEngine.Encrypt(ckey, data.AsBuffer(), null);返回 buffEncrypt.ToArray();这是工作
    猜你喜欢
    • 2020-09-28
    • 2018-11-03
    • 2017-05-10
    • 1970-01-01
    • 2019-02-11
    • 2018-02-16
    • 2023-03-07
    • 1970-01-01
    • 2014-04-25
    相关资源
    最近更新 更多