如果我已经拥有密钥(作为字符串),则使用AES加密windows phone 8中的数据

本文关键字:加密 AES windows phone 数据 拥有 密钥 字符串 如果 | 更新日期: 2023-09-27 18:18:28

我正在开发一个需要加密和解密的wp8应用程序。实际上,我需要一种方法来加密一些数据使用AES。我已经有了键(作为字符串)。我需要一个c#等效下面的java代码有人能帮助吗?

public static String encryptWithAES(String payload, String aesKey) {
    byte[] raw = aesKey.getBytes();
    SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES/ECB/PKCS5Padding");
    try {
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
        byte[] encrypted;
        encrypted = cipher.doFinal(payload.getBytes());
        cipher = null;
        return Base64.encodeToString(encrypted, Base64.DEFAULT);
    } catch (Exception e) {
        System.out.println("Error in encryptWithAES!!!");
        e.printStackTrace();
    }
    return null;
}

我是这样做的:

public static byte[] EncryptWithAES(string dataToEncrypt, String Key)
    {
        byte[] encryptedData;
        byte[] keyBytes = System.Text.Encoding.UTF8.GetBytes(Key);

        using (AesManaged aesEnc = new AesManaged())
        {
            aesEnc.Key = keyBytes;
            aesEnc.IV = new byte[16];
            //Create encryptor for converting
            ICryptoTransform encryptor = aesEnc.CreateEncryptor(aesEnc.Key, aesEnc.IV);

            using (MemoryStream memStream = new MemoryStream())
            {
                using (CryptoStream crypStream = new CryptoStream(memStream, encryptor, CryptoStreamMode.Write))
                {
                    using (StreamWriter srmWriter= new StreamWriter(crypStream))
                    {
                        srmWriter.Write(dataToEncrypt);
                    }
                    encryptedData = memStream.ToArray();
                }
            }
        }
        return encryptedData;
    }

我得到的错误是我设置键:ie aesEnc.Key= keyBytes;

如果我已经拥有密钥(作为字符串),则使用AES加密windows phone 8中的数据

你的c#代码运行良好。你写,"我得到的错误是我设置密钥的地方:即aesEnc。Key= keyBytes;"但是你没有提到错误是什么。我猜您会得到一个带有消息的Cryptographic Exception,"指定的密钥不是此算法的有效大小"。

作为一个实验,试试这个:

byte[] output = EncryptWithAES("Hello", Encoding.UTF8.GetString(new byte[16]));

byte[] output = EncryptWithAES("Hello", Encoding.UTF8.GetString(new byte[32]));

,看看是否仍然得到设置键的错误。也就是说,确保您的键字符串生成一个16或32字节的数组。