【知識積累】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.pswp.cn/news/375011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375011.shtml
英文地址,請注明出處:http://en.pswp.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();//例子…