请教大神,关于AES加密解密的java实现(C#下实现AES加密解密,如何用java实现)

zyfwj 2015-10-28 11:52:51
下面这段是用C#做的AES加密,请教各位大神如何用java实现,谢谢!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text;
using System.Security.Cryptography;
namespace AES加密解密
{


/// <summary>
/// AES 加密解密类
/// </summary>
public class AES
{
/// <summary>
/// AES 加密算法,返回加密结果
/// </summary>
/// <param name="toEncrypt">加密字符串</param>
/// <param name="sKey">密钥</param>
/// <returns value="string">加密结果</returns>
public static string AESEncrypt(string toEncrypt, string sKey)
{
sKey += "qDj46SdehW";
if (string.IsNullOrEmpty(toEncrypt) || string.IsNullOrEmpty(sKey)) return "";
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = GetLegalKey(sKey);
//Console.Write(rDel.Key);
rDel.IV = GetLegalIV(sKey);
//Console.Write(rDel.Key);
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
cTransform.Dispose();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}

/// <summary>
/// AES 解密算法,返回解密结果
/// </summary>
/// <param name="toDecrypt">解密字符串</param>
/// <param name="sKey">密钥</param>
/// <returns value="string">解密结果</returns>
public static string AESDecrypt(string toDecrypt, string sKey)
{
sKey += "qDj46SdehW";
if (string.IsNullOrEmpty(toDecrypt) || string.IsNullOrEmpty(sKey)) return "";
string toD = "";
int len = toDecrypt.Length;
if (len % 4 == 0)
toD = toDecrypt;
else
toD = toDecrypt.PadRight((len + 4 - len % 4), '+');
try
{
byte[] toEncryptArray = Convert.FromBase64String(toD);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = GetLegalKey(sKey);
rDel.IV = GetLegalIV(sKey);
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
cTransform.Dispose();
return UTF8Encoding.UTF8.GetString(resultArray);
}
catch
{
return "";
}
}

/// <summary>
/// 获得密钥
/// </summary>
/// <param name="Key">密钥值</param>
/// <returns></returns>
private static byte[] GetLegalKey(string Key)
{
SymmetricAlgorithm mobjCryptoService = new RijndaelManaged();
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
Console.Write("密钥:"+sTemp);
return ASCIIEncoding.ASCII.GetBytes(sTemp);

}

/// <summary>
/// 获取算法的初始化向量
/// </summary>
/// <param name="IV"></param>
/// <returns></returns>
private static byte[] GetLegalIV(string IV)
{
SymmetricAlgorithm mobjCryptoService = new RijndaelManaged();
string sTemp = IV;
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
Console.Write("向量:"+sTemp);
return UTF8Encoding.UTF8.GetBytes(sTemp);
}
static void Main(){
String str = AESEncrypt("85493409","W32*F4U6R4C");
Console.Write("加密结果:"+str);



}
}

}





...全文
354 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_20371011 2018-06-21
  • 打赏
  • 举报
回复
mobjCryptoService.GenerateKey();这个执行后生成的key是什么,长度固定吗
zyfwj 2015-10-29
  • 打赏
  • 举报
回复
我的这个C#加密方式有变动的,你给出的那个链接我测试了其中的代码,和我的C#得出的密文是不一样的
老李家的小二 2015-10-29
  • 打赏
  • 举报
回复
http://www.cnblogs.com/freeliver54/archive/2011/10/08/2202136.html
zyfwj 2015-10-28
  • 打赏
  • 举报
回复
怎么感觉人气越来越少了?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧