java c# 加密与解密对照

原文 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进制的方法(已测) 

Java代码 

 

  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. }  

Java代码 

 

  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.  }   

C#代码 

 

  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.     }  

Java代码 

 

  1. // 3DES加密 基方法  
  2.     public static byte[] des3EncodeCBC(byte[] data, byte[] key) throws Exception {  
  3.   
  4.         Key deskey = null;  
  5.         DESedeKeySpec spec = new DESedeKeySpec(key);  
  6.         SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");  
  7.         deskey = keyfactory.generateSecret(spec);  
  8.   
  9.         Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");  
  10.         IvParameterSpec ips = new IvParameterSpec(IV);  
  11.         cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);  
  12.         return cipher.doFinal(data, 0, data.length);  
  13.   
  14.     }  

C#代码 

 

  1. // 3DES加密算法  
  2.     private static bool Encrypt( byte[] key, byte[] input, out byte[] output )  
  3.         {  
  4.             output = null;  
  5.   
  6.             try  
  7.             {  
  8.                 TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();  
  9.                 ICryptoTransform encryptObj = trippleDesProvider.CreateEncryptor(rkey, IV);  
  10.                 output = encryptObj.TransformFinalBlock(input, 0, input.Length);  
  11.                 trippleDesProvider.Clear();  
  12.             }  
  13.             catch (Exception)  
  14.             {  
  15.                 return false;  
  16.             }  
  17.   
  18.             return true;  
  19.         }  

Java代码 

 

  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.           
  8.         Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");  
  9.         IvParameterSpec ips = new IvParameterSpec(IV);  
  10.         cipher.init(Cipher.DECRYPT_MODE, deskey, ips);  
  11.         return cipher.doFinal(data, 0, data.length);  
  12.     }  

C#代码 

 

  1. // 3DES 解密 基方法  
  2.     private static bool Decrypt(byte[] key, byte[] input, out byte[] output)  
  3.         {  
  4.             output = null;  
  5.   
  6.             try  
  7.             {  
  8.                 TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();  
  9.                 ICryptoTransform decryptObj = trippleDesProvider.CreateDecryptor(key, IV);  
  10.                 output = decryptObj.TransformFinalBlock(input, 0, input.Length);  
  11.                 trippleDesProvider.Clear();  
  12.             }  
  13.             catch (Exception ex)  
  14.             {  
  15.                 return false;  
  16.             }  
  17.   
  18.             return true;  
  19.         }  

Java代码 

 

  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.     }  

C#代码 

 

    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.     }   
时间: 2024-12-28 10:09:23

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

java EJB 加密与解密原理的一个例子_php技巧

加密与解密原理的一个例子 package lockunlock;  import Java.awt.*;  import java.awt.event.*;  import java.Applet.*;  import javax.Swing.*;  import java.util.*;  public class LockUnlock extends JApplet {  private boolean isStandalone = false;  //Get a parameter val

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

项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /** * 加密 * * @param content 需要加密的内容 * @param password 加密密钥 * @return */ public static String encrypt(String content, String password) { try { //如下代码

用asp写个简单的加密和解密的类

加密|解密 用asp写个简单的加密和解密的类,在这个类中简单的实现了一个加密和解密.目的是和大家分享一下.这个类的破解非常简单.看看我的注释就知道是怎么回事了.下次编写一个java的加密和解密的类. class Base64Class rem Const dim sBASE_64_CHARACTERS'转化码 dim lenString '计算字符串的长度 dim iCount '计数器 dim returnValue '返回值 dim tempChar'缓存字符 dim tempString'

用Asp写个加密和解密的类

用asp写个简单的加密和解密的类,在这个类中简单的实现了一个加密和解密.目的是和大家分享一下.这个类的破解非常简单.看看我的注释就知道是怎么回事了.下次编写一个java的加密和解密的类. class Base64Class rem Const dim sBASE_64_CHARACTERS转化码 dim lenString 计算字符串的长度 dim iCount 计数器 dim returnValue 返回值 dim tempChar缓存字符 dim tempString缓存字符串 dim pa

PHP、Java des加密解密实例

  这篇文章主要介绍了PHP.Java des加密解密实例,des加密是对称加密中在互联网应用的比较多的一种加密方式,本文分别给出了PHP和JAVA版本的实现代码,需要的朋友可以参考下 des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 下面是加密解密的实例 代码如下: $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_

求java中常用的加密、解密算法?

问题描述 求java中常用的加密.解密算法? 页面提交的密码.电话等信息通常需要加密后存放到数据库里,在个人信息展示时通常需要进行解密,如何实现?求案例或者思路. 解决方案 常用加密解密算法java常用的加密,解密,数字签名等APIJava Cipher类 DES算法(加密与解密) 解决方案二: 这个其实在百度里搜一下,到处都有答案,现提供一个参考文章:http://www.blogjava.net/amigoxie/archive/2014/07/06/415503.html 解决方案三: h

c# java des 互通-(C#转JAVA)DES加密解密问题 。带入整8B加密数据, JAVA写的总是比C#写的多出来8B

问题描述 (C#转JAVA)DES加密解密问题 .带入整8B加密数据, JAVA写的总是比C#写的多出来8B 1C C# private byte[] CSharpEncryptByte(byte[] InputByte byte[] sKey) { DESCryptoServiceProvider DES = new DESCryptoServiceProvider(); DES.Padding = PaddingMode.Zeros; DES.Key = sKey; DES.IV = new

DES加密和解密PHP,Java,ObjectC统一的方法

原文:DES加密和解密PHP,Java,ObjectC统一的方法 PHP的加解密函数 <?php class DesComponent { var $key = '12345678'; function encrypt($string) { $ivArray=array(0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF); $iv=null; foreach ($ivArray as $element) $iv.=CHR($element); $siz

密钥生成器-java中的 DES 加密与解密

问题描述 java中的 DES 加密与解密 DES类 package dao; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; public class DES { public static String ALGORITHM_DES="DES"; //加密算法的名称 public sta