【知识积累】DES算法之C#加密Java解密

一、前言

  在项目需要添加安全模块,客户端调用服务端发布的service必须要经过验证,加密算法采用DES,客户端采用C#进行加密,服务端使用Java进行解密。废话不多说,直接上代码。

二、客户端

  客户端采用C#进行开发,C#进行DES加密解密代码清单如下: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.IO;namespace DESHelper
{public class DESHelper{private static string m_encryptkey = "ENCRYPTT";private static string m_str = "IAMACOEDR";public static string DESEncrypt(){string str = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + m_str;DESCryptoServiceProvider des = new DESCryptoServiceProvider();byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(str);//建立加密对象的密钥和偏移量    //原文使用ASCIIEncoding.ASCII方法的GetBytes方法    //使得输入密码必须输入英文文本    des.Key = ASCIIEncoding.ASCII.GetBytes(m_encryptkey);des.IV = ASCIIEncoding.ASCII.GetBytes(m_encryptkey);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();StringBuilder ret = new StringBuilder();foreach (byte b in ms.ToArray()){ret.AppendFormat("{0:X2}", b);}ret.ToString();return ret.ToString();}public static string DESDecrypt(string pToDecrypt, string sKey){DESCryptoServiceProvider des = new DESCryptoServiceProvider();byte[] inputByteArray = new byte[pToDecrypt.Length / 2];for (int x = 0; x < pToDecrypt.Length / 2; x++){int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));inputByteArray[x] = (byte)i;}des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();StringBuilder ret = new StringBuilder();return System.Text.Encoding.Default.GetString(ms.ToArray());}static void Main(string[] args){string str = DESEncrypt();Console.WriteLine(str);Console.WriteLine(DESDecrypt(str, m_encryptkey));}}
}
View Code

  运行结果:

  34DB26C86E933FB8F9C294A563BEF742D85451292A3C40C6FC8DF5A99C56EDCC
  2016-03-10 12:43:05IAMACOEDR

三、服务器

  服务器采用Java进行开发,Java进行DES加密解密代码清单如下: 

import javax.crypto.SecretKey;   
import javax.crypto.SecretKeyFactory;   
import javax.crypto.spec.DESKeySpec;   
import javax.crypto.spec.IvParameterSpec;  
import java.security.Key;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.Cipher;public class Des {       //解密数据   public static String decrypt(String message,String key) throws Exception {                byte[] bytesrc =convertHexString(message);      Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");       DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));      SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");      SecretKey secretKey = keyFactory.generateSecret(desKeySpec);      IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));                      cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);                       byte[] retByte = cipher.doFinal(bytesrc);   return new String(retByte);    }  // 加密数据public static byte[] encrypt(String message, String key)   throws Exception {   Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");   DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));      SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");   SecretKey secretKey = keyFactory.generateSecret(desKeySpec);   IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));   cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);   return cipher.doFinal(message.getBytes("UTF-8"));   }   public static byte[] convertHexString(String ss) {    byte digest[] = new byte[ss.length() / 2];    for(int i = 0; i < digest.length; i++) {    String byteString = ss.substring(2 * i, 2 * i + 2);    int byteValue = Integer.parseInt(byteString, 16);    digest[i] = (byte)byteValue;    }    return digest;    }  public static String toHexString(byte b[]) {   StringBuffer hexString = new StringBuffer();   for (int i = 0; i < b.length; i++) {   String plainText = Integer.toHexString(0xff & b[i]);   if (plainText.length() < 2)   plainText = "0" + plainText;   hexString.append(plainText);   }   return hexString.toString();   }       public static void main(String[] args) throws Exception {   String key = "ENCRYPTT";   String value = "IAMACODER";   String formatString = java.net.URLEncoder.encode(value, "utf-8");             System.out.println("加密数据:"+ formatString);   String encryptedString = toHexString(encrypt(formatString, key));                    System.out.println("加密后的数据为:" + encryptedString);   String decryptedString = java.net.URLDecoder.decode(decrypt(encryptedString, key), "utf-8") ;   System.out.println("解密后的数据:" + decryptedString);     }    
}
View Code

  运行结果:

  加密数据:IAMACODER
  加密后的数据为:a8a3f8641ec18ddeff808105c493510e
  解密后的数据:IAMACODER

四、测试C#加密&Java解密

  将C#端加密的字符串传入Java端(替换decrypt中的encryptedString即可)直接进行解密,可以得到如下结果:

  加密数据:IAMACODER
  加密后的数据为:a8a3f8641ec18ddeff808105c493510e
  解密后的数据:2016-03-10 12:43:05IAMACOEDR

五、总结

  这是一个小的功能模块,有此需求的园友可以直接拿去使用,谢谢各位园友观看~

转载于:https://www.cnblogs.com/leesf456/p/5261201.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Space.js – HTML 驱动的页面 3D 滚动效果

为了让我们的信息能够有效地沟通&#xff0c;我们需要创建用户和我们的媒体之间的强有力的联系。今天我们就来探讨在网络上呈现故事的新方法&#xff0c;并为此创造了一个开源和免费使用的 JavaScript 库称为 space.js。该库是 HTML 驱动的&#xff0c;这意味着你不需要在网站上…

离职感言-Symbio的5年工作回顾和总结(转载)

离职感言-Symbio的5年工作回顾和总结 (2011-06-02 21:06:30) 转载▼2005年底&#xff0c;当时我在西安过的还不错&#xff0c;结了婚&#xff0c;买了房&#xff0c;在公司也受老板器重&#xff0c;但是初为人父&#xff0c;孩子带给我的那种人生紧迫感&#xff1a;“再不趁还…

64位CentOS6.2安装erlang及rabbitmqServer

CentOS 6.2 64bit 安装erlang及RabbitMQ Server 1、操作系统环境(CentOS 6.2 64bit) 1 [rootHAproxy ~]# cat /etc/issue2 3 CentOS release 6.2 (Final)4 Kernel \r on an \m5 [rootHAproxy ~]# cat /proc/cpuinfo |grep "clflush size"6 clflush size : 647 clf…

Kafka的Producer和Consumer源码学习

先解释下两个概念&#xff1a; high watermark (HW) 它表示已经被commited的最后一个message offset(所谓commited, 应该是ISR中所有replica都已写入)&#xff0c;HW以下的消息都已被ISR中各个replica同步&#xff0c;从而保持一致。HW以上的消息可能是脏数据&#xff1a;部分r…

for+next()实现数组的遍历及while list each 的使用

//要求使用for循环语句来完成该数组的遍历//输出每一项的键名和对应值&#xff1a; $a array( a > 34, 5 > 51, 13, 32, bb>15, 2 > 31 ); $len count($a); for($i0;$i<$len;$i)…

读Pyqt4教程,带你入门Pyqt4 _005

对话框窗体或对话框是现代GUI应用不可或缺的一部分。dialog定义为两个或多个人之间的交谈。在计算机程序中dialog是一个窗体&#xff0c;用来和程序“交谈”。对话框用来输入数据、修改数据、改变程序设置等等。对话框是用户和计算机程序沟通的重要手段。 QColorDialog 颜色对话…

Linux内核的启动过程分析

秦鼎涛 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000  一、实验目的及要求&#xff1a; 使用gdb跟踪调试内核从start_kernel到init进程启动 详细分析从start_kernel到init进程启动的过程并结合实验截图撰写一篇署名博客&#xff0c;并在博客文…

static修饰符详解

static表示“全局”或者“静态”的意思&#xff0c;用来修饰成员变量和成员方法&#xff0c;也可以形成静态static代码块&#xff0c;但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说&#xff0c;它不依赖类特定的实例&…

四则运算2+psp0

程序要求&#xff1a; 1.题目避免重复 2.可定制&#xff08;数量\打印方式&#xff09; 3.可以一下控制参数 ① 是否有乘除法 ② 是否有括号&#xff08;最多支持十个数参与运算&#xff09; ③ 数值范围 ④加减有无负数 ⑤除法有无余数 分析&#xff1a;① 如果是两个数…

kettle作业中的js如何写日志文件

在kettle作业中JavaScript脚本有时候也扮演非常重要的角色&#xff0c;此时我们希望有一些日志记录。下面是job中JavaScript记录日志的方式。 job的js写日志的方法。 得到日志输出实例 org.pentaho.di.core.logging.LogWriter.getInstance();按照日志的级别输出&#xff1a; pu…

浅析Kerberos原理,及其应用和管理

文章作者&#xff1a;luxianghao 文章来源&#xff1a;http://www.cnblogs.com/luxianghao/p/5269739.html 转载请注明&#xff0c;谢谢合作。 免责声明&#xff1a;文章内容仅代表个人观点&#xff0c;如有不当&#xff0c;欢迎指正。 --- 一&#xff0c;引言 Kerberos简单来…

2014! 的末尾有多少个0

2014&#xff01; 的末尾有多少个0<?xml version"1.0" encoding"UTF-8"?> 假设 末尾有 k 个0&#xff0c;所以 2014&#xff01; x * 10^k ; 10 ^ k &#xff08;2 * 5 &#xff09;^ k 2^k * 5^k, 明显所有数字中因数含有2的数字多于含有5的数…

[转载]一句话插配置文件

http://www.t00ls.net/viewthread.php?tid13901 一句话插入配置文件system.asp没有过滤双引号&#xff0c;插入一句就行。常规插法如下&#xff1a;"%><%eval request("d")%><%但金刀客这篇文件&#xff08;http://www.cqzh.cn/post/328.html&…

android插件化-获取apkplug框架已安装插件-03

上一篇文章成功的将apkplug框架嵌入了应用中而且启动 链接http://www.apkplug.com/blog/?post10 这一篇文章实现怎样获取全部已安装插件 一 获取框架的SystemBundle的上下文BundleContext apkplug框架启动会自己主动创建一个SystemBundle, 它是框架的第一个插件不可停止和卸…

Java实现栈。

定义一个接口MyStack接口&#xff1a; package Stack; public interface MyStack<T> { boolean isEmpty(); int length(); boolean push(T date); T pop();} 数组实现&#xff1a; package Stack; public class ArrayStack<T> implements MyStack<T>{ privat…

转载]SA权限九种上传方法

刚看了一种方法&#xff0c;如果是注入点&#xff0c;利用管中窥豹以二进制的方式上传&#xff0c;上传的时候最好改下名&#xff0c;比如do.exe&#xff0c;上传到目标服务器可以改成do.cmd&#xff0c;等传上去之后用copy 命令改回来。 当然用啊d也可以上传&#xff0c;还有…

asp.net 导出Excel

asp.net 导出Excel 分享一个asp.net 导出假Excel代码。优点&#xff0c;不用借助于任何插件比如&#xff08;NPOI&#xff09;,复制代码&#xff0c;修改grid.DataSource直接导出。 先看导出后的效果图 1 System.Web.UI.WebControls.DataGrid grid new DataGrid();2 …

bzoj 2300 动态维护上凸壳(不支持删除)

新技能GET。 用set保存点&#xff0c;然后只需要找前趋和后继就可以动态维护了。 1 /**************************************************************2 Problem: 23003 User: idy0024 Language: C5 Result: Accepted6 Time:556 ms7 Memory:4824 kb8 …

带有Guice的富域模型

贫血域模型是一个非常常见的反模式。 在ORM和DI框架的世界中&#xff0c;我们自然会发现自己拥有一个由ORM管理的“域”&#xff0c;该域包含所有数据且无行为。 通过我们的DI框架有帮助地注入了辅助类&#xff0c;这些辅助类都是行为且没有数据。 在本文中&#xff0c;我将介绍…

php匿名函数小示例

<?php //$fun function($params){ // echo $params; //}; // //$fun(aa);//例一 //在普通函数中定义一个匿名函数 //function printStr(){ // $fun function($something){ // echo $something; // }; // $fun(something); // //} //printStr();//例子…