【知识积累】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;“再不趁还…

读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;并在博客文…

四则运算2+psp0

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

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

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

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 …

《Linux内核分析》 第四节 扒开系统调用的三层皮(上)

黄胤凯 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、视频学习 1.系统调用的三层皮&#xff1a;xyz system_call sys_xyz 对应的是API&#xff0c;中断向量对应的中断服务程序&#xff0c;系统调用服务程…

OllyDBG反汇编快速找到程序入口一点分析

出处&#xff1a;http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html 先声明下&#xff1a;这个和脱壳没关系&#xff0c;不是找壳里面的程序入口哦&#xff0c;只是程序本身的入口&#xff0c;个别朋友不要误会哈。其实这个应该是基础&#xff0c;但我经常找…

PHP计划任务之关闭浏览器后仍然继续执行的函数

函数名称&#xff1a;ignore_user_abort 本函数配置或取得使用端连接中断后&#xff0c;PHP 程序是否仍继续执行。默认值为中断连接后就停止执行。在 PHP 配置文件中 (php3.ini/php.ini) 的 ignore_user_abort 选项就是配置处。本功能在 PHP 3.0.7 版之后才开始提供。 官方说明…

记对一个key file crackme的破解

crackme下载地址: http://kssd.pediy.com/tutorial/exercise/section04/chap6-1-4-03.zip ------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------…

Chrome/Chromium HTML5 video 视频播放硬件加速

Chromium站点上有个大致的框图。描写叙述了Chromium的video在各个平台 - 包含Android - 上是怎样使用硬件资源来做视频编解码加速的&#xff1a; 而依据Android Kitkat上的Chromium代码分析&#xff0c;HTML5 video播放硬件加速&#xff0c;终于是使用MediaCodec.java来利用本地…

.net mvc结合微软提供的FormsAuthenticationTicket登陆

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…

JS 操作 radio input(cc问卷管理)

1、选中特定的单选按钮 function showDetail(content){$("input[name^radio]").removeAttr("checked");for(var i0;i<content.length;i){$("#radio"(i1)content.substr(i,1)).attr("checked","checked");} }2、手动添加问…

Apache Lucene拼写检查器的“您是不是要”功能

Google的“您是不是要”功能 在上一篇文章中对Lucene进行了介绍之后 &#xff0c;现在是时候提高它&#xff0c;创建一个更复杂的应用程序了。 您肯定最熟悉Google的“您是不是要”功能&#xff08;其他搜索引擎也支持此功能&#xff09;。 这是一个例子&#xff1a; Lucene …

Android-做个性化的进度条

1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的)。另一张是进度条的图片(一般采用颜色比较深的图片)。进度在滚动时&#xff1a;进度图片逐步显示&#xff0c;背景图片逐…

(笔试题)二进制1的个数相同的距离最小数

题目&#xff1a; 输入&#xff1a;整数A输出&#xff1a;整数B条件&#xff1a;A和B的二进制1的个数相同&#xff0c;且A和B之间的距离|A-B|最小。思路&#xff1a; 题目没有说明整数类型&#xff0c;这里认为是带符号的整数&#xff0c;即区分正负数。 根据题意&#xff0c;A…

hadoop5--mapreduce设计模式

运行结果附图 本节课程主要内容为学习MapReduc设计模式&#xff0c;并编写java程序对日志文件进行处理。 课本上介绍的MapReduce的设计模式主要包含:计数(Counting),分类(Classification),过滤处理(Filtering),排序(Sorting),去重计数(Distinct Counting),相关计数(Cross-Corre…