java与.net des加解密 方法解析
来源:互联网 发布:kenzo知乎 编辑:程序博客网 时间:2024/06/16 01:52
java的des的加密和解密以及c#的加密和解密的方法:
DES加密
DES是一种对称加密(Data Encryption Standard)算法 ,两个关键点,第一个是加密算法,第二个是数据补位。
加密算法常见的有ECB模式和CBC模式:
ECB模式:电子密本方式,这是JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节(注意:这里就涉及到数据补位了)进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。
CBC模式:密文分组链接方式,这是.NET封装的DES算法的默认模式,它比较麻烦,加密步骤如下:
1、首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,就涉及到数据补位了)
2、第一组数据D1与向量I异或后的结果进行DES加密得到第一组密文C1(注意:这里有向量I的说法,ECB模式下没有使用向量I)
3、第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
4、之后的数据以此类推,得到Cn
5、按顺序连为C1C2C3......Cn即为加密结果。
一、java的des加密和解密
//des加密后base64public String DESEncrypt(String inputData, String inputKey)throws Exception {byte[] DESkey = inputKey.getBytes();// 设置密钥DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂Key key = keyFactory.generateSecret(keySpec);// 得到密钥对象Cipher enCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");// 得到加密对象CipherenCipher.init(Cipher.ENCRYPT_MODE, key);// 设置工作模式为加密模式,给出密钥和向量byte[] pasByte = enCipher.doFinal(inputData.getBytes("utf-8"));BASE64Encoder base64Encoder = new BASE64Encoder();return base64Encoder.encode(pasByte);} //先反base64,然后public static String DESDecrypt(String inputData, String inputKey)throws Exception {BASE64Decoder base64Decoder = new BASE64Decoder();byte[] byteInputData = base64Decoder.decodeBuffer(inputData);byte[] DESkey = inputKey.getBytes();// 设置密钥DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂Key key = keyFactory.generateSecret(keySpec);// 得到密钥对象// using DES in ECB modeCipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");// 用密匙初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, key);byte decryptedData[] = cipher.doFinal(byteInputData);String value = new String(decryptedData, "UTF-8");return value;// decryptedData;}public String GetUtcTime(String format) throws Exception {if (format == "") {format = "yyyy-MM-dd hh:mm";}DateFormat gmtFormat = new SimpleDateFormat(format);TimeZone gmtTime = TimeZone.getTimeZone("UTC");gmtFormat.setTimeZone(gmtTime);Calendar calendar = java.util.Calendar.getInstance();return gmtFormat.format(calendar.getTime());}
二、c#的加密和解密
/// <summary> /// 默认使用ECB模式进行加密 /// </summary> /// <param name="strToEncrypt"></param> /// <param name="sKey"></param> /// <param name="paddingMode"></param> /// <returns>返回的是二进制数据转换为Base64字符串</returns> public static string DESEncrypt(string strToEncrypt, string sKey, PaddingMode paddingMode = PaddingMode.PKCS7) { var result = string.Empty; using (var objDesCryptoServiceProvider = new DESCryptoServiceProvider()) { byte[] inputByteArray = Encoding.UTF8.GetBytes(strToEncrypt); objDesCryptoServiceProvider.Key = Encoding.UTF8.GetBytes(sKey); objDesCryptoServiceProvider.Mode = CipherMode.ECB; objDesCryptoServiceProvider.Padding = paddingMode; byte[] bysEncrypted = objDesCryptoServiceProvider.CreateEncryptor().TransformFinalBlock(inputByteArray, 0, inputByteArray.Length); result = Convert.ToBase64String(bysEncrypted); } return result; } /// <summary> /// 默认使用ECB模式进行解密 /// </summary> /// <param name="strToDecrypt">输入的是Base64字符串的密文</param> /// <param name="sKey"></param> /// <param name="paddingMode"></param> /// <returns></returns> public static string DESDecrypt(string strToDecrypt, string sKey, PaddingMode paddingMode = PaddingMode.PKCS7) { var result = string.Empty; using (var objDesCryptoServiceProvider = new DESCryptoServiceProvider()) { byte[] inputByteArray = Convert.FromBase64String(strToDecrypt); objDesCryptoServiceProvider.Key = Encoding.UTF8.GetBytes(sKey); objDesCryptoServiceProvider.Mode = CipherMode.ECB; objDesCryptoServiceProvider.Padding = paddingMode; using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, objDesCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); result = Encoding.UTF8.GetString(ms.ToArray()).Replace('\0', ' ');//Zeros模式下去掉多余的补位 } } } return result; }
三、java打包成jar供外部调用
http://www.cnblogs.com/lanxuezaipiao/p/3291641.html
首先下载fat jar,地址:http://sourceforge.net/project/showfiles.php?group_id=115990&package_id=125924
下载后,解压缩,有一个plugins文件夹,里面有个jar包。
将这个文件夹放入myeclipse的dropins目录,这里我的路径是D:/Program Files/Genuitec/MyEclipse 8.5/dropins,仅供参考。重启eclipse后,右键点击项目,可以看见一个带前面有绿色加号的选项->Build Fat Jar,就表示安装成功了。
如果你要把你的项目打包成一个可执行jar,右键点击项目->Build Fat Jar,出现一个界面。界面各属性如下设置:
Jar-name:你要生成的jar的名字
Manifest:最重要的配置文件,但这一步不需要你关心,不要改动
Main-Class:你的jar从哪个main函数启动
Class-path:通常是一个点“.”,如果你使用了外部类,那么还需设置外部类。
例如我的项目使用了jpcap.jar和jpcap.dll,那么我的path是“. jpcap.jar jpcap.dll”,千万记得那个点不能省略,同时外部类前面都要有个空格。这些属性会写入Manifest。
点下一步,出现一个界面让你选择将什么打包进去,选择你需要的类就可以了,那些外部依赖的包因为我们前面已经设置了,因此不要选。完成后会在你的工程目录下生成一个可执行的jar包,这个时候你再记得把你的外部类拷过来(即和这个jar包在同一目录下),OK!
参考:
des 在线tools https://www.tools4noobs.com/online_tools/encrypt/
java中的des http://www.cnblogs.com/xyzlmn/archive/2010/05/06/1729039.html
JAVA和.NET使用DES对称加密的区别 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html
- java与.net des加解密 方法解析
- java des 加解密方法
- java 与 c# 3des 加解密
- Android(java)与C#,DES加解密
- java 与 c# 3des 加解密
- DES加解密(Java)
- Java Des加解密
- java des加解密
- java des 加解密
- java DES加解密
- DES加解密(Java)
- .NET 与 Java DES 加密/解密 互通 方法
- java与.NET通用的3DES加密解密方法
- ios des加密与解密(对应JAVA加解密)
- MD5+DES在C#.NET与Java/Android中的加解密使用
- JAVA与.NET DES加密解密
- java 3DES 加解密
- java des加解密算法
- Andriod 内存泄露问题的整理
- 欢迎使用CSDN-markdown编辑器
- Spring+Hibernate的整合项目框架
- Hadoop基准测试HiBench 学习笔记 - 1
- LeetCode 228 Summary Ranges
- java与.net des加解密 方法解析
- Android Intent的使用
- 《机器学习实战》 自制勘误表 中文版第一版2015年9月第11次印刷版
- Python:字符串分割
- 事件驱动程序设计学习笔记
- 启承转合——沟通管理之我见
- Oracle 基础
- get方式提交中文到服务器显示乱码问题
- Android Handler 小结