起因对接合作伙伴的系统,需要对数据进行AES加密
默认的使用了已经写好的帮助类中加密算法,发现结果不对,各种尝试改变加密模式改变向量等等折腾快一下午。最后网上查了下AES在JAVA里面的实现完整代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
static
String AesEncrypt(String content,String encyKey) {
try
{
KeyGenerator kgen = KeyGenerator.getInstance(
"AES"
);
SecureRandom secureRandom = SecureRandom.getInstance(
"SHA1PRNG"
);
secureRandom.setSeed(encyKey.getBytes());
kgen.init(
128
, secureRandom);
Cipher cipher=Cipher.getInstance(
"AES"
);
cipher.init(Cipher.DECRYPT_MODE,
new
SecretKeySpec(kgen.generateKey().getEncoded(),
"AES"
));
byte
[] byteContent = content.getBytes(
"utf-8"
);
byte
[] result = cipher.doFinal(byteContent);
BASE64Encoder encode =
new
BASE64Encoder ();
String strResult=encode.encode(result);
return
strResult;
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
|
根据博主:http://www.cnblogs.com/amylis_chen/p/6107162.html#commentform 的经验有了思路
解决办法,通过JAVA代码生成AES的密钥,再通过C#代码进行AES加密
1
2
3
4
5
6
7
8
9
10
|
//JAVA代码生成密钥
String encyKey=
"合作伙伴提供的密钥 "
;
KeyGenerator kgen = KeyGenerator.getInstance(
"AES"
);
java.security.SecureRandom random = java.security.SecureRandom.getInstance(
"SHA1PRNG"
);
random.setSeed(encyKey.getBytes());
kgen.init(
128
, random);
SecretKey secretKey = kgen.generateKey();
byte
[] enCodeFormat = secretKey.getEncoded();
BASE64Encoder coder =
new
BASE64Encoder();
System.out.println(coder.encode(enCodeFormat));
|
C#代码进行AES加密
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
class
Program
{
static
void
Main(
string
[] args)
{
//默认密钥向量
var
result = AESEncode(
"123456"
,
"JAVA代码输出的密钥"
);
Console.WriteLine(result);
Console.ReadLine();
}
public
static
string
AESEncode(
string
encryptString,
string
encryptKey)
{
if
(
string
.IsNullOrEmpty(encryptString))
return
null
;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptString);
RijndaelManaged rm =
new
RijndaelManaged
{
Key = Convert.FromBase64String(encryptKey),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return
Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
}
|