原文 java c# 加密与解密对照

最近一直烦恼,java , c# 加密的不同,然后整理了一下,留个备份的轮子:

其中在 java、c#加密转换时,最重要的是 IV 的确定,我常常用如下方法使得java和c#之间的 IV 可以转换: 
将其中某个 IV 数组转为 10进制后,在转换为相应的 byte数组就好了。10进制数组成为 java、c# 中IV转换的桥梁了。最后分别有java(我用myeclipse)和c#的编译器(SharpDevelop2很轻量级的编译器,但是运行代码后需要在后面写上 "Console.ReadLine(); " ,不然dos框会一闪而过。这个编译器还需要系统中安装有.net 2.0或者其他版本)多多实践,这样可以更加直接的看到结果。 下面实例中java与c#的代码都是一一对应的:当然,这些加密算法并不适合所有的加密结构,但是重要的是 IV 、key 的格式化。 网上查了资料,找到java转换为16进制的方法(已测)

  1. // java格式化16进制输出
  2. public static void formatIntTo16(byte[] bytes) {
  3. String[] resultBytes = new String[bytes.length];
  4. for (int i = 0; i < bytes.length; i++) {
  5. resultBytes[i] = Integer.toHexString(bytes[i] & 0xFF);
  6. }
  7. }
  1. //MD5加密
  2. public static String md5Encode(String strContent) {
  3. try {
  4. MessageDigest messageDigest = MessageDigest.getInstance("MD5");
  5. byte[] tempBytes =  messageDigest.digest(strContent.getBytes("UnicodeLittleUnmarked"));
  6. StringBuffer stringBuffer = new StringBuffer();
  7. for(byte bytes: tempBytes) {
  8. String tempByte = Integer.toHexString(bytes & 0xFF);
  9. if(tempByte.length() == 1) {
  10. stringBuffer.append("0");
  11. }
  12. stringBuffer.append(tempByte);
  13. }
  14. return stringBuffer.toString();
  15. } catch(Exception e) {
  16. e.printStackTrace();
  17. }
  18. return null;
  19. }
  1. //md5加密
  2. public static void MD5(string str) {
  3. string cl1 = str;
  4. string pwd = "";
  5. System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
  6. byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
  7. for (int i = 0; i < s.Length; i++) {
  8. pwd = pwd + s[i].ToString("x");
  9. }
  10. Console.Write(pwd);
  11. Console.WriteLine();
  12. }
  1. // 3DES加密 基方法
  2. public static byte[] des3EncodeCBC(byte[] data, byte[] key) throws Exception {
  3. Key deskey = null;
  4. DESedeKeySpec spec = new DESedeKeySpec(key);
  5. SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
  6. deskey = keyfactory.generateSecret(spec);
  7. Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
  8. IvParameterSpec ips = new IvParameterSpec(IV);
  9. cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
  10. return cipher.doFinal(data, 0, data.length);
  11. }
  1. // 3DES加密算法
  2. private static bool Encrypt( byte[] key, byte[] input, out byte[] output )
  3. {
  4. output = null;
  5. try
  6. {
  7. TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();
  8. ICryptoTransform encryptObj = trippleDesProvider.CreateEncryptor(rkey, IV);
  9. output = encryptObj.TransformFinalBlock(input, 0, input.Length);
  10. trippleDesProvider.Clear();
  11. }
  12. catch (Exception)
  13. {
  14. return false;
  15. }
  16. return true;
  17. }
  1. // 3DES 解密 基方法
  2. public static byte[] des3DecodeCBC(byte[] data, byte[] key) throws Exception {
  3. Key deskey = null;
  4. DESedeKeySpec spec = new DESedeKeySpec(key);
  5. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("desede");
  6. deskey = keyFactory.generateSecret(spec);
  7. Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
  8. IvParameterSpec ips = new IvParameterSpec(IV);
  9. cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
  10. return cipher.doFinal(data, 0, data.length);
  11. }
  1. // 3DES 解密 基方法
  2. private static bool Decrypt(byte[] key, byte[] input, out byte[] output)
  3. {
  4. output = null;
  5. try
  6. {
  7. TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();
  8. ICryptoTransform decryptObj = trippleDesProvider.CreateDecryptor(key, IV);
  9. output = decryptObj.TransformFinalBlock(input, 0, input.Length);
  10. trippleDesProvider.Clear();
  11. }
  12. catch (Exception ex)
  13. {
  14. return false;
  15. }
  16. return true;
  17. }
  1. //DES加密
  2. public static String encode(byte[] key, byte[] iv, byte[] data) throws Exception {
  3. Key deskey = null;
  4. DESKeySpec spec = new DESKeySpec(key);
  5. SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
  6. deskey = keyFactory.generateSecret(spec);
  7. IvParameterSpec ips = new IvParameterSpec(iv);
  8. Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
  9. cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
  10. return new BASE64Encoder().encode(cipher.doFinal(data, 0, data.length));
  11. }
    1. //DES加密
    2. public static string DESEncode(string encryptString, string encryptKey) {
    3. byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
    4. byte[] rgbIV = DESKeys;
    5. byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
    6. DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
    7. MemoryStream mStream = new MemoryStream();
    8. CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV),
    9. CryptoStreamMode.Write);
    10. cStream.Write(inputByteArray, 0, inputByteArray.Length);
    11. cStream.FlushFinalBlock();
    12. return Convert.ToBase64String(mStream.ToArray());
    13. }

java c# 加密与解密对照的更多相关文章

  1. Java Base64加密、解密原理Java代码

    Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...

  2. java AES加密、解密(兼容windows和linux)

      java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...

  3. Java的加密与解密

    package com.wangbo.util; import java.security.Key; import java.security.Security; import javax.crypt ...

  4. Java DES 加密和解密源码(转)

    原文地址:http://www.oschina.net/code/snippet_727646_18383 Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互 ...

  5. C# 与 Java Rsa加密与解密互通

    Rsa 加密标准的制定已经过去了十多年了. 这两天在看rsa 加密的文章,基本上都是在说 .net 与 java 之间的 rsa加密是不能互通的.因为项目有用到,所以花了点时间对rsa加密做了一点点了 ...

  6. Java aes加密C#解密的取巧方法

    摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Ja ...

  7. java AES 加密与解密

    package com.ss.util.secret;   import java.io.UnsupportedEncodingException; import java.security.Inva ...

  8. java常用加密和解密工具类EncryptUtil.java

    package cn.util; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; im ...

  9. java——base64 加密和解密

    base64 一.加密 *.若有要求输入字符必须为UTF-8: 则需str.getByte("utf-8");  //在getByte()中指定utf-8编码,否则中文字符将被加密 ...

随机推荐

  1. Mac开发利器之程序员编辑器MacVim学习总结

    Emacs和Vim都是程序员专用编辑器,Emacs被称为神的编辑器,Vim则是编辑器之神.至于两者到底哪个更好用,网络上两大派系至今还争论不休.不过,相比之下,Emacs更加复杂,已经不能算是一个编辑 ...

  2. 正确处理WPF中Slider值改变事件的方式

    最近在用WPF数据绑定重写一下播放器项目时遇到的关于Slider的问题,在窗体透明度调节和播放进度调节上用了Slider控件.调节窗体透明度我是 这么想的:将窗体的Opacity属性的值与Slider ...

  3. Oracle之存储过程

    1.存储过程创建 oracle中创建存储过程的语法如下: CREATE [OR REPLACE] PROCEDURE PRO_NAME[(parameter1[,parameter2]...)]is| ...

  4. 将日志搬家到自己的站点 http://nowhereman.cn/

    个人站点同步地址 : http://nowhereman.cn/

  5. java 词法分析器

    参考:http://www.cnblogs.com/yanlingyin/archive/2012/04/17/2451717.html 实现了一个简单的java词法分析器 功能:词法分析下面一段ja ...

  6. C# Windows - 菜单栏和工具栏

    除了MenuStrip控件之外,还有许多控件可用于填充菜单.3个常见的控件是ToolStripMenuItem,ToolStripDropDown,和ToolStripSeparator.这些控件表示 ...

  7. python学习小结4:类

    虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程. 类和对象是面向对象编程的两个主要方面.类:创建一个新类型,而对象是这个类的实例,类使用class关键字创建.类的域和方法被列在一个 ...

  8. C#系统缓存全解析

    原文:http://blog.csdn.net/wyxhd2008/article/details/8076105 目录(?)[-] 系统缓存的概述 页面输出缓存 页面局部缓存 文件缓存依赖 数据库缓 ...

  9. Xcode Provisioning 路径

    ~/Library/MobileDevice/Provisioning Profiles

  10. jquery each函数对应的continue 和 break方法

    continue: return true; break: return false; $("#oGrid").each(function (i, v) { if (i == 0) ...