请教:C#实现的AES加密,如何用java实现!

问题描述

下面这段是用C#做的AES加密,请教各位大神如何用java实现,谢谢!usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Text;usingSystem.Security.Cryptography;namespaceAES加密解密{///<summary>///AES加密解密类///</summary>publicclassAES{///<summary>///AES加密算法,返回加密结果///</summary>///<paramname="toEncrypt">加密字符串</param>///<paramname="sKey">密钥</param>///<returnsvalue="string">加密结果</returns>publicstaticstringAESEncrypt(stringtoEncrypt,stringsKey){sKey+="qDj46SdehW";if(string.IsNullOrEmpty(toEncrypt)||string.IsNullOrEmpty(sKey))return"";byte[]toEncryptArray=UTF8Encoding.UTF8.GetBytes(toEncrypt);RijndaelManagedrDel=newRijndaelManaged();rDel.Key=GetLegalKey(sKey);//Console.Write(rDel.Key);rDel.IV=GetLegalIV(sKey);//Console.Write(rDel.Key);rDel.Mode=CipherMode.ECB;rDel.Padding=PaddingMode.PKCS7;ICryptoTransformcTransform=rDel.CreateEncryptor();byte[]resultArray=cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);cTransform.Dispose();returnConvert.ToBase64String(resultArray,0,resultArray.Length);}///<summary>///AES解密算法,返回解密结果///</summary>///<paramname="toDecrypt">解密字符串</param>///<paramname="sKey">密钥</param>///<returnsvalue="string">解密结果</returns>publicstaticstringAESDecrypt(stringtoDecrypt,stringsKey){sKey+="qDj46SdehW";if(string.IsNullOrEmpty(toDecrypt)||string.IsNullOrEmpty(sKey))return"";stringtoD="";intlen=toDecrypt.Length;if(len%4==0)toD=toDecrypt;elsetoD=toDecrypt.PadRight((len+4-len%4),'+');try{byte[]toEncryptArray=Convert.FromBase64String(toD);RijndaelManagedrDel=newRijndaelManaged();rDel.Key=GetLegalKey(sKey);rDel.IV=GetLegalIV(sKey);rDel.Mode=CipherMode.ECB;rDel.Padding=PaddingMode.PKCS7;ICryptoTransformcTransform=rDel.CreateDecryptor();byte[]resultArray=cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);cTransform.Dispose();returnUTF8Encoding.UTF8.GetString(resultArray);}catch{return"";}}///<summary>///获得密钥///</summary>///<paramname="Key">密钥值</param>///<returns></returns>privatestaticbyte[]GetLegalKey(stringKey){SymmetricAlgorithmmobjCryptoService=newRijndaelManaged();stringsTemp=Key;mobjCryptoService.GenerateKey();byte[]bytTemp=mobjCryptoService.Key;intKeyLength=bytTemp.Length;if(sTemp.Length>KeyLength)sTemp=sTemp.Substring(0,KeyLength);elseif(sTemp.Length<KeyLength)sTemp=sTemp.PadRight(KeyLength,'');Console.Write("密钥:"+sTemp);returnASCIIEncoding.ASCII.GetBytes(sTemp);}///<summary>///获取算法的初始化向量///</summary>///<paramname="IV"></param>///<returns></returns>privatestaticbyte[]GetLegalIV(stringIV){SymmetricAlgorithmmobjCryptoService=newRijndaelManaged();stringsTemp=IV;mobjCryptoService.GenerateIV();byte[]bytTemp=mobjCryptoService.IV;intIVLength=bytTemp.Length;if(sTemp.Length>IVLength)sTemp=sTemp.Substring(0,IVLength);elseif(sTemp.Length<IVLength)sTemp=sTemp.PadRight(IVLength,'');Console.Write("向量:"+sTemp);returnUTF8Encoding.UTF8.GetBytes(sTemp);}staticvoidMain(){Stringstr=AESEncrypt("85493409","W32*F4U6R4C");Console.Write("加密结果:"+str);}}}

解决方案

本帖最后由 zyfwj 于 2015-10-28 14:03:45 编辑

时间: 2024-09-18 03:46:38

请教:C#实现的AES加密,如何用java实现!的相关文章

c#-用C#解密JAVA的AES加密字符串

问题描述 用C#解密JAVA的AES加密字符串 附JAVA的加密方法 public static String encrypt(String s, String token) { try { byte[] key = Hex.toBytes(token); return encryptBase64URLSafe(s, key); } catch (Exception e) { // e.printStackTrace(); return null; } } public static byte[

JAVA中AES加密方法实例分析_java

本文实例讲述了JAVA中AES加密方法.分享给大家供大家参考.具体如下: java代码: KeyGenerator kg = KeyGenerator.getInstance("AES"); //获取密匙生成器 kg.init(256); //初始化 //DES算法必须是56位 //DESede算法可以是112位或168位 //AES算法可以是128.192.256位 SecretKey key = kg.generateKey(); //生成密匙,可用多种方法来保存密匙 加密: Ci

两种JavaScript的AES加密方式(可与Java相互加解密)_javascript技巧

由于JavaScript属于弱类型脚本语言,因此当其与强类型的后台语言进行数据交互时会产生各种问题,特别是加解密的操作.本人由于工作中遇到用js与Java进行相互加解密的问题,在网上查了很多资料及代码段,均无法解决.后总结多篇文档内容终于找到解决办法,现记录与此: 下面给大家介绍两种JavaScript的AES加密方式,具体详情如下所示: 第一种:加解密时需要秘钥(key)和秘钥偏移量(iv)的情况,在线验证地址:http://www.seacha.com/tools/aes.html //该方

Android AES加密工具类分享

1.AES加密工具类 java不支持PKCS7Padding,只支持PKCS5Padding.我们知道加密算法由算法+模式+填充组成,下一篇介绍iOS和Android通用的AES加密,本篇文章使用PKCS5Padding加密方式. package com.example.aesdemo; import java.io.UnsupportedEncodingException; import javax.crypto.Cipher; import javax.crypto.spec.SecretK

标准PHP的AES加密算法类

 AES是分组密钥,算法输入128位数据,密钥长度也是128位.用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列).每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与.     分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识.   代码如下

php中AES加密解密的例子小结

 话不多说,先放上代码,一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件) aesDemo.php:   例子,    代码如下: <?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// 把加密后的字符串按十六进制进行存储 //$aes = new AES(true,true);// 带有调试信息且加密字符串按十六进制存储 $key = "this is

php实现aes加密类分享

 这篇文章主要介绍了php实现的aes加密类,代码中有使用方法,需要的朋友可以参考下  代码如下: <?php   class AESMcrypt {    public $iv = null;  public $key = null;  public $bit = 128;  private $cipher;    public function __construct($bit, $key, $iv, $mode) {   if(empty($bit) || empty($key) || e

Node.js中AES加密和其它语言不一致问题解决办法

 这篇文章主要介绍了Node.js中AES加密和其它语言不一致问题解决办法,例如和C#.JAVA语言相互通信时,需要的朋友可以参考下 例子一:   这几天被一个问题困扰着.Nodejs的AES加密和Java,C#加密出来的不一致.当然,这样就不能解密了.纠结了许久:后来还是实在不行了,看了下源代码,要不然还得继续纠结下去.网上说,通常的nodejs AES和其他语言实现不一样.好吧~~或许吧. nodejs的crypto模块.    代码如下: var crypto = require('cry

算法-C#AES加密时,怎么产生密钥和密钥向量?

问题描述 C#AES加密时,怎么产生密钥和密钥向量? 各位大神好,最近在做一个一个项目,牵扯到加密,网上搜到了加密算法,但是不知道AES的机密密钥和密钥向量怎么产生?烦请各位为小弟指点一下~ 解决方案 /// AES加密 /// </summary> /// <param name=""inputdata"">输入的数据</param> /// <param name=""iv""&g