如果我已经拥有密钥(作为字符串),则使用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
;
你的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字节的数组。