我正准备在服务器端 (c#) 进行加密,并在 android 端 (Java) 为我的 api 密钥进行解密。c# 中的加密/解密都可以。而且,在 Java 中,加密/解密也可以。主要问题是用 C# 生成的密文与 java 不同,尽管我使用了相同的密钥。C# 生成的密文无法在 Java 中解密。我试过如下。
在爪哇
public static String key = "aaaaaaaabbccccbbaaaaaaaabbccccbb";
private static byte[] key_Array = Base64.decode(key,Base64.DEFAULT);
public static String encrypt(String plainText)
{
try
{
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
// Initialization vector.
// It could be any value or generated using a random number generator.
byte[] iv = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 };
IvParameterSpec ivspec = new IvParameterSpec(iv);
Key secretKey = new SecretKeySpec(key_Array, "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
return Base64.encodeToString(cipher.doFinal(plainText.getBytes()),Base64.DEFAULT);
}
catch (Exception e)
{
System.out.println("[Exception]:"+e.getMessage());
}
return null;
}
public static String decrypt(String encryptedMessage)
{
try
{
//Cipher _Cipher = Cipher.getInstance("AES");
//Cipher _Cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
Cipher _Cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
// Initialization vector.
// It could be any value or generated using a random number generator.
byte[] iv = { 1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1, 7, 7, 7, 7 };
IvParameterSpec ivspec = new IvParameterSpec(iv);
Key SecretKey = new SecretKeySpec(key_Array, "AES");
_Cipher.init(Cipher.DECRYPT_MODE, SecretKey, ivspec);
byte decodedMessage[] = Base64.decode(encryptedMessage,Base64.DEFAULT);
return new String(_Cipher.doFinal(decodedMessage));
}
慕娘9325324
相关分类