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());
- }
java c# 加密与解密对照的更多相关文章
- Java Base64加密、解密原理Java代码
Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...
- java AES加密、解密(兼容windows和linux)
java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...
- Java的加密与解密
package com.wangbo.util; import java.security.Key; import java.security.Security; import javax.crypt ...
- Java DES 加密和解密源码(转)
原文地址:http://www.oschina.net/code/snippet_727646_18383 Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互 ...
- C# 与 Java Rsa加密与解密互通
Rsa 加密标准的制定已经过去了十多年了. 这两天在看rsa 加密的文章,基本上都是在说 .net 与 java 之间的 rsa加密是不能互通的.因为项目有用到,所以花了点时间对rsa加密做了一点点了 ...
- Java aes加密C#解密的取巧方法
摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Ja ...
- java AES 加密与解密
package com.ss.util.secret; import java.io.UnsupportedEncodingException; import java.security.Inva ...
- java常用加密和解密工具类EncryptUtil.java
package cn.util; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; im ...
- java——base64 加密和解密
base64 一.加密 *.若有要求输入字符必须为UTF-8: 则需str.getByte("utf-8"); //在getByte()中指定utf-8编码,否则中文字符将被加密 ...
随机推荐
- HTML5特性:使用async属性异步加载执行JavaScript
HTML5让我兴奋的一个最大的原因是,它里面实现的新功能和新特征都是我们长久以来一直期待的.比如,我以前一直在使用placeholders,但以前必须要用JavaScript实现.而HTML5里给Ja ...
- linux学习之进程,线程和程序
程序.进程和线程的概念 1:程序和进 ...
- mac os去除去除.DS_Store文件--使用python和go(原创)
.DS_Store (英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮文件夹的自定义属性,例如文件们的图标位置或者是背景 ...
- [转] 浅谈Microsoft MVP
微软MVP,这个自1993 年开始在社群上出现的计划(MVP Award Program),目前在全球已经累积超过5,000 人,其中在台湾已经有一百多人了,包括我在内,这个计画现在已经成为以微软技术 ...
- MinGW-64 安装
一.在mingw-w64官网下载mingw-w64在线安装包 二.点击mingw-w64进行安装,选择: Version:选最新版本 我这个是4.9.2 Architecture:x86_64 (64 ...
- 编译linux内核问题
1: openssl/opensslv.h: No such file or directory sudo apt-get install libssl-dev 2:一般配置内核树,需要先make o ...
- 外企iOS开发的笔试题
一组外企iOS开发的笔试题,您能回答出来吗?从群里收集来的. (miki西游@mikixiyou的文档,原文链接: http://mikixiyou.iteye.com/blog/1546376 转 ...
- Daject初探之Record模型
上一篇博文我简单介绍了Daject以及Daject的Table模型,Table模型是对一张数据表的抽象,从数据表的级别处理数据,而Record模型是对单条数据记录的抽象,从记录的级别处理数据. 这一篇 ...
- 活动图 Activity Diagram
活动图 可通过一系列操作将业务流程或软件进程以工作流的形式显示出来.这些操作可以由人.软件组件或计算机来执行. 使用活动图可以描述多种类型的流程,如下: 1.用户和您的系统之间的业务流程或工作流. 2 ...
- Windows下将txt导入MySQL及远程连接设置
1.修改字符编码,全部修改为gbk.这样修改,重启后又会恢复默认值. show variables like '%char%'; set character_set_database=gbk; 其中, ...