`
JavaStudyEye
  • 浏览: 80600 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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格式化16进制输出
	public static void formatIntTo16(byte[] bytes) {
		String[] resultBytes = new String[bytes.length];
		for (int i = 0; i < bytes.length; i++) {
			resultBytes[i] = Integer.toHexString(bytes[i] & 0xFF);
		}
	}



   //MD5加密
    public static String md5Encode(String strContent) {
    	try {
    		MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        	byte[] tempBytes =  messageDigest.digest(strContent.getBytes("UnicodeLittleUnmarked"));
        	StringBuffer stringBuffer = new StringBuffer();
        	for(byte bytes: tempBytes) {
        		String tempByte = Integer.toHexString(bytes & 0xFF);
        		if(tempByte.length() == 1) {
        			stringBuffer.append("0");
        		}
        		stringBuffer.append(tempByte);
        	}
        	return stringBuffer.toString();
    	} catch(Exception e) {
    		e.printStackTrace();
    	}
    	return null;
    } 


//md5加密
	public static void MD5(string str) {
		string cl1 = str;
		string pwd = "";
		System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
		byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
		for (int i = 0; i < s.Length; i++) {
			pwd = pwd + s[i].ToString("x");
		}
		Console.Write(pwd);
		Console.WriteLine();
	}


// 3DES加密 基方法
	public static byte[] des3EncodeCBC(byte[] data, byte[] key) throws Exception {

		Key deskey = null;
		DESedeKeySpec spec = new DESedeKeySpec(key);
		SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
		deskey = keyfactory.generateSecret(spec);

		Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
		IvParameterSpec ips = new IvParameterSpec(IV);
		cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
		return cipher.doFinal(data, 0, data.length);

	}

// 3DES加密算法
	private static bool Encrypt( byte[] key, byte[] input, out byte[] output )
        {
            output = null;

            try
            {
                TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();
                ICryptoTransform encryptObj = trippleDesProvider.CreateEncryptor(rkey, IV);
                output = encryptObj.TransformFinalBlock(input, 0, input.Length);
                trippleDesProvider.Clear();
            }
            catch (Exception)
            {
                return false;
            }

            return true;
        }

// 3DES 解密 基方法
	public static byte[] des3DecodeCBC(byte[] data, byte[] key) throws Exception {
		Key deskey = null;
		DESedeKeySpec spec = new DESedeKeySpec(key);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("desede");
		deskey = keyFactory.generateSecret(spec);
		
		Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
		IvParameterSpec ips = new IvParameterSpec(IV);
		cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
		return cipher.doFinal(data, 0, data.length);
	}

// 3DES 解密 基方法
	private static bool Decrypt(byte[] key, byte[] input, out byte[] output)
        {
            output = null;

            try
            {
                TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();
                ICryptoTransform decryptObj = trippleDesProvider.CreateDecryptor(key, IV);
                output = decryptObj.TransformFinalBlock(input, 0, input.Length);
                trippleDesProvider.Clear();
            }
            catch (Exception ex)
            {
                return false;
            }

            return true;
        }


//DES加密
	public static String encode(byte[] key, byte[] iv, byte[] data) throws Exception {
		Key deskey = null;
		DESKeySpec spec = new DESKeySpec(key);
		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");     
		deskey = keyFactory.generateSecret(spec);
		IvParameterSpec ips = new IvParameterSpec(iv);
		Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); 
		cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
		return new BASE64Encoder().encode(cipher.doFinal(data, 0, data.length));
	}


//DES加密   
public static string DESEncode(string encryptString, string encryptKey) { 
		byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); 
		byte[] rgbIV = DESKeys; 
		byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); 
		DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); 
		MemoryStream mStream = new MemoryStream(); 
		CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), 
		CryptoStreamMode.Write); 
		cStream.Write(inputByteArray, 0, inputByteArray.Length); 
     		cStream.FlushFinalBlock(); 
     		return Convert.ToBase64String(mStream.ToArray()); 
	} 

分享到:
评论

相关推荐

    C#RSA加密与JAVA解密,实现相互通信

    "C# RSA加密与JAVA解密,实现相互通信"的主题聚焦于如何利用RSA公钥/私钥加密算法在C#和Java两个不同的编程环境中实现安全的数据交换。RSA是一种非对称加密算法,它使用一对密钥——公钥和私钥,公钥用于加密,私钥...

    C#加密和解密

    C#加密和解密C#加密和解密C#加密和解密C#加密和解密

    RSA算法JAVA公钥加密,C#私钥解密

    在这个示例中,"RSA加密"的压缩包可能包含了Java和C#的完整源代码,用于演示如何在两者之间实现RSA公钥加密和私钥解密的过程。开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。

    C# RSA加密解密

    解密过程与加密相反: 1. 用同样的方式实例化`RSACryptoServiceProvider`,但这次可以导入之前导出的公钥或私钥参数。 2. 使用`Decrypt()`方法,传入加密后的数据(Base64解码)和相同的填充模式标志。 3. 解密后...

    AES java 与 C#加密解密

    在IT领域,加密和解密是确保数据安全的重要手段,特别是在跨平台的环境中,如Java和C#之间进行数据交换时。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,适用于保护敏感...

    c#加密解密源码

    在IT领域,加密和解密是信息安全的重要组成部分,特别是在C#编程环境中,开发相关的加密解密功能对于数据保护至关重要。本文将围绕"C#加密解密源码"这一主题,深入探讨C#中加密解密的基本原理、常用算法以及如何通过...

    RSA加密算法实现以及C#与java互通加解密

    ### RSA加密算法实现以及C#与Java互通加解密 #### 一、RSA算法简介 RSA算法是一种非对称加密算法,由Ron Rivest、Adi Shamir 和 Leonard Adleman 在1977年提出,并以其三人的名字首字母命名。RSA算法的安全性基于...

    C#文件加密解密(完整项目)

    C#作为一种强大的面向对象的编程语言,提供了丰富的库和工具来实现文件的加密和解密。本项目"文件加密解密(完整项目)"专注于利用C#进行文件的安全处理,确保数据在传输和存储时的隐私性。 一、C#加密技术基础 C#...

    C#与java平台RSA加密解密签名验签互通案例

    本案例聚焦于"C#与Java平台RSA加密解密签名验签互通"的问题,这涉及到两个主要的技术点:RSA加密算法和跨平台兼容性。下面将详细阐述这两个知识点。 首先,RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和...

    C++/java/C#语言的AES加密解密

    标题中的"C++/java/C#语言的AES加密解密"涉及到的是三种常用编程语言——C++、Java和C#在实现AES(Advanced Encryption Standard,高级加密标准)算法上的应用。AES是一种广泛使用的对称加密算法,它在信息安全领域...

    C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制.rar

    本主题主要探讨的是如何使用C#实现加密和解密操作,以便与Java应用程序进行无缝对接,特别是使用AES/CBC/PKCS7Padding算法,并将结果转换为16进制表示。下面将详细阐述相关知识点。 **AES(Advanced Encryption ...

    C#和Java实现互通的RSA&DES加解密算法

    C#和Java中都有内置的类库支持RSA加密,如C#的System.Security.Cryptography.RSACryptoServiceProvider和Java的java.security.KeyPairGenerator与java.security.Signature等。 接下来,我们讨论DES(Data ...

    java c# des加密解密

    ### Java与C#中的DES加密解密技术 #### 一、概述 在现代软件开发中,数据的安全性至关重要。为了确保数据在传输过程中的安全,加密技术被广泛应用。其中,数据加密标准(Data Encryption Standard,简称DES)是一...

    DES加密方法JAVA和C#交叉加密解密代码

    DES加密方法JAVA和C#交叉加密解密代码

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    操作步骤与上述相反,使用私钥进行加密,公钥进行解密。 5. **注意事项**: - 加解密的数据长度受限于RSA密钥的大小,通常为密钥长度减去11位。因此,如果需要加密大量数据,通常会采用一种称为“密钥交换”的方式...

    C#加密解密DeEncryptHelper.zip

    DES加密/解密类。 加密 加密数据 解密 解密数据 得到随机安全码(哈希加密)。 得到随机哈希加密字符串 哈希加密一个字符串 RSA加密解密及RSA签名和验证 RSA 的密钥产生 产生私钥 和公钥 RSA 方式加密 RSA的解密...

    C#加密解密(自定义加密字符)

    带加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) ///   /// 加密字符串 ///   ///  name="str"&gt;要加密的字符串  /// 加密后的...

    C#加密解密小工具,轻松实现数据加密解密

    C#编写的加密解密小工具,可以对DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求。 使用方法可浏览博文《C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求》

    C#加密用JAVA解密

    Java的解密过程与C#中的加密过程相反,首先设置相同的密钥和初始化向量,然后创建解密器,并将加密后的字节流转回原始字符串。以下是Java解密的伪代码: ```java import javax.crypto.Cipher; import javax.crypto....

Global site tag (gtag.js) - Google Analytics