亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C# 3DES加密詳解

2020-01-24 01:46:22
字體:
來源:轉載
供稿:網友

最近一個項目中,因為服務端是用的java開發的,客戶端是用的C#,由于通信部分采用到了3DES加密,所以做個記錄,以備以后需要的時候直接用。

  這是對方(java)的加密算法,和網上流傳的代碼也差不多(主密鑰直接寫死了,方便測試)

package org.zwork.market.mina.msg;import java.security.spec.KeySpec;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.DESedeKeySpec;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.zwork.market.MktContants;public class ThreeEncryptDecrypt {  private static final Logger LOGGER = LoggerFactory.getLogger(ThreeEncryptDecrypt.class);  // 定義 加密算法,可用 DES,DESede,Blowfish  public static final String Algorithm = "DESede";  public static String DES = "DES/ECB/NoPadding";  public static String TriDes = "DESede/ECB/NoPadding";  // des加密  public static byte[] des_crypt(byte key[], byte data[]) {    try {      KeySpec ks = new DESKeySpec(key);      SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");      SecretKey ky = kf.generateSecret(ks);      Cipher c = Cipher.getInstance(DES);      c.init(Cipher.ENCRYPT_MODE, ky);      return c.doFinal(data);    } catch (Exception e) {      LOGGER.error("des_crypt error:", e);      return null;    }  }  // des解密  public static byte[] des_decrypt(byte key[], byte data[]) {    try {      KeySpec ks = new DESKeySpec(key);      SecretKeyFactory kf = SecretKeyFactory.getInstance("DES");      SecretKey ky = kf.generateSecret(ks);      Cipher c = Cipher.getInstance(DES);      c.init(Cipher.DECRYPT_MODE, ky);      return c.doFinal(data);    } catch (Exception e) {      LOGGER.error("des_decrypt error:", e);      return null;    }  }  // 3DES加密  public static byte[] trides_crypt(byte key[], byte data[]) {    try {      byte[] k = new byte[24];      int len = data.length;      if (data.length % 8 != 0) {        len = data.length - data.length % 8 + 8;      }      byte[] needData = null;      if (len != 0)        needData = new byte[len];      for (int i = 0; i < len; i++) {        needData[i] = 0x00;      }      System.arraycopy(data, 0, needData, 0, data.length);      if (key.length == 16) {        System.arraycopy(key, 0, k, 0, key.length);        System.arraycopy(key, 0, k, 16, 8);      } else {        System.arraycopy(key, 0, k, 0, 24);      }      KeySpec ks = new DESedeKeySpec(k);      SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");      SecretKey ky = kf.generateSecret(ks);      Cipher c = Cipher.getInstance(TriDes);      c.init(Cipher.ENCRYPT_MODE, ky);      return c.doFinal(needData);    } catch (Exception e) {      LOGGER.error("trides_crypt error:", e);      return null;    }  }  // 3DES解密  public static byte[] trides_decrypt(byte key[], byte data[]) {    try {      byte[] k = new byte[24];      int len = data.length;      if (data.length % 8 != 0) {        len = data.length - data.length % 8 + 8;      }      byte[] needData = null;      if (len != 0)        needData = new byte[len];      for (int i = 0; i < len; i++) {        needData[i] = 0x00;      }      System.arraycopy(data, 0, needData, 0, data.length);      if (key.length == 16) {        System.arraycopy(key, 0, k, 0, key.length);        System.arraycopy(key, 0, k, 16, 8);      } else {        System.arraycopy(key, 0, k, 0, 24);      }      KeySpec ks = new DESedeKeySpec(k);      SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");      SecretKey ky = kf.generateSecret(ks);      Cipher c = Cipher.getInstance(TriDes);      c.init(Cipher.DECRYPT_MODE, ky);      return c.doFinal(needData);    } catch (Exception e) {      LOGGER.error("trides_decrypt error:", e);      return null;    }  }  public static String getPass(String source) {    byte[] data= hexToBytes(source);    byte[] key ="111111111111111111111111111a1.1.".getBytes();    String result = byte2hex(trides_decrypt(key, data)).toUpperCase();    return result.substring(2, 8);  }  public static String byte2hex(byte[] data) {    StringBuffer sb = new StringBuffer();    for (int i = 0; i < data.length; i++) {      String temp = Integer.toHexString(((int) data[i]) & 0xFF);      for (int t = temp.length(); t < 2; t++) {        sb.append("0");      }      sb.append(temp);    }    return sb.toString();  }  public static byte[] hexToBytes(String str) {    if (str == null) {      return null;    } else if (str.length() < 2) {      return null;    } else {      int len = str.length() / 2;      byte[] buffer = new byte[len];      for (int i = 0; i < len; i++) {        buffer[i] = (byte) Integer.parseInt(str.substring(i * 2, i * 2 + 2), 16);      }      return buffer;    }  }}

  因為客戶端只負責數據加密,所以我這里只寫了加密的部分。由于java和C#語言很相似,所以我就仿這他們給的java代碼改成C#的,當然也在網上參考了一些代碼,不過中間還是出現了些問題,比如C#不支持弱密鑰(把密鑰弄復雜點),因為沒注意大小寫造成加密結果不一致等等。編程這東西一個點都能讓整個系統崩潰,所以小細節很重要!?。?/p>

public class DESHelper{  /// <summary>  /// 將密碼轉成直接數組  /// </summary>  /// <param name="str"></param>  /// <returns></returns>  public static byte[] HexToBytes(String str)  {    if (str == null)    {      return null;    }    else if (str.Length < 2)    {      return null;    }    else    {      int len = str.Length / 2;      byte[] buffer = new byte[len];      for (int i = 0; i < len; i++)      {        var temp = str.Substring(i * 2, 2);        buffer[i] = (byte)Convert.ToInt32(temp, 16);      }      return buffer;    }  }  /// <summary>  /// 3DES加密  /// </summary>  /// <param name="key"></param>  /// <param name="data"></param>  /// <returns></returns>  public static byte[] GetDes3EncryptedText(byte[] key, byte[] data)  {    byte[] k = new byte[24];    int len = data.Length;    if (data.Length % 8 != 0)    {      len = data.Length - data.Length % 8 + 8;    }    byte[] needData = null;    if (len != 0)      needData = new byte[len];    for (int i = 0; i < len; i++)    {      needData[i] = 0x00;    }    Buffer.BlockCopy(data, 0, needData, 0, data.Length);    if (key.Length == 16)    {      Buffer.BlockCopy(key, 0, k, 0, key.Length);      Buffer.BlockCopy(key, 0, k, 16, 8);    }    else    {      Buffer.BlockCopy(key, 0, k, 0, 24);    }    var des3 = new TripleDESCryptoServiceProvider();    des3.Key = k;    des3.Mode = CipherMode.ECB;    des3.Padding = PaddingMode.Zeros;    using (MemoryStream ms = new MemoryStream())    using (CryptoStream cs = new CryptoStream(ms, des3.CreateEncryptor(), CryptoStreamMode.Write))    {      cs.Write(data, 0, data.Length);      cs.FlushFinalBlock();      return ms.ToArray();    }  }  /// <summary>  /// 將加密結果轉成字符串  /// </summary>  /// <param name="data"></param>  /// <returns></returns>  public static String GetByte2Hex(byte[] data)  {    StringBuilder sb = new StringBuilder();    for (int i = 0; i < data.Length; i++)    {      String temp = string.Format("{0:X}", ((int)data[i]) & 0xFF);      for (int t = temp.Length; t < 2; t++)      {        sb.Append("0");      }      sb.Append(temp);    }    return sb.ToString();  }}

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩风俗一区 二区| 国语对白做受69| 日韩av在线直播| 欧美电影在线观看网站| 欧美精品成人91久久久久久久| 国产精品极品尤物在线观看| 中文字幕欧美亚洲| 国产精品久久久久久一区二区| 午夜精品一区二区三区在线视| 国产在线观看精品一区二区三区| 在线激情影院一区| 97**国产露脸精品国产| 久久久噜噜噜久久久| 国产日产亚洲精品| 久久免费少妇高潮久久精品99| 日韩视频免费大全中文字幕| 国产成人一区三区| 亚洲精选在线观看| 91网在线免费观看| 国产成人精品日本亚洲| 久久久精品国产亚洲| 97精品国产97久久久久久春色| 欧美性色19p| 日韩网站免费观看高清| 性金发美女69hd大尺寸| 91成人天堂久久成人| 亚洲欧美日韩精品久久奇米色影视| 欧美极品少妇全裸体| 亚洲日韩第一页| 国产精品一区二区三区久久久| 欧美成年人视频网站| 26uuu日韩精品一区二区| 欧美野外wwwxxx| 欧美黑人国产人伦爽爽爽| 九九精品在线播放| 色老头一区二区三区在线观看| 欧美成aaa人片在线观看蜜臀| 欧美黑人xxxx| 欧美日韩亚洲天堂| 亚洲人a成www在线影院| 成人福利在线观看| 国产精品成熟老女人| 欧美激情亚洲综合一区| 亚洲韩国青草视频| 亚洲激情 国产| 亚洲qvod图片区电影| 91精品国产高清久久久久久| 精品久久久999| 国产视频丨精品|在线观看| 亚洲区在线播放| 国产在线视频一区| 亚洲男人第一网站| 日韩大片在线观看视频| 国产精品视频永久免费播放| 亚洲国产精品系列| 欧美激情在线一区| 欧美一级淫片videoshd| 国产精品久久久久久久久久| 2019最新中文字幕| 在线丨暗呦小u女国产精品| 国产成人自拍视频在线观看| 8090成年在线看片午夜| 热99精品只有里视频精品| 亚洲福利视频专区| 91久久精品国产91久久性色| 国产在线高清精品| 日韩亚洲欧美中文在线| 亚洲欧美国产日韩中文字幕| 91影院在线免费观看视频| 色综合久综合久久综合久鬼88| 国产日韩在线播放| 国产精品欧美一区二区| 91在线播放国产| 日韩欧美在线播放| 日韩在线免费视频观看| 午夜精品久久久久久久99热浪潮| 国产精品午夜视频| 成人激情综合网| 国产一区二区三区在线播放免费观看| 欧美日韩国产一区中文午夜| 欧美日在线观看| 国产69精品久久久久9| 成人网在线视频| 夜夜嗨av一区二区三区免费区| 亚洲视频在线免费看| 日韩美女福利视频| 中文字幕在线观看日韩| 亚洲黄色av女优在线观看| 国产999精品久久久影片官网| 日韩美女视频免费在线观看| 久久精品视频在线观看| 国产大片精品免费永久看nba| 91av成人在线| 亚洲视频电影图片偷拍一区| 亚洲国产成人爱av在线播放| 亚洲国产精品资源| 日韩网站免费观看高清| 亚洲一区二区久久久| 欧美与欧洲交xxxx免费观看| 亚洲精品国产精品久久清纯直播| 深夜福利91大全| 亚洲一级一级97网| 日韩av在线免费看| 国产精品国产福利国产秒拍| 国产精品白嫩初高中害羞小美女| 国产精品久久久久久久久男| 精品久久久精品| 国产精品视频精品视频| 亚洲а∨天堂久久精品9966| 国产ts人妖一区二区三区| 91手机视频在线观看| 91成品人片a无限观看| 91国内在线视频| 国产精品日韩在线一区| 欧美成人一区二区三区电影| 自拍偷拍亚洲在线| y97精品国产97久久久久久| 91精品国产高清久久久久久91| 亚洲美女视频网| 亚洲三级黄色在线观看| 另类图片亚洲另类| 欧美日韩国产影院| 高清欧美性猛交xxxx| 久久免费精品日本久久中文字幕| 亚洲网站在线观看| 久久精品国产久精国产一老狼| 91久久国产婷婷一区二区| 欧美在线视频在线播放完整版免费观看| 91在线|亚洲| 欧美疯狂做受xxxx高潮| 91九色视频在线| 国产小视频国产精品| 国产成一区二区| 色天天综合狠狠色| 亚洲乱码一区二区| 俺去啦;欧美日韩| 久久这里只有精品99| 色午夜这里只有精品| 国产va免费精品高清在线| 日韩精品免费在线播放| 日韩欧美国产激情| 欧美在线一区二区三区四| 日本精品视频在线播放| 国产日韩欧美日韩大片| 性欧美xxxx| 夜夜嗨av色综合久久久综合网| 亚洲天堂影视av| 亚洲一区美女视频在线观看免费| 国语自产偷拍精品视频偷| 久久久在线观看| 国产精品一区二区三| 国产日韩av在线播放| 国产精品白丝jk喷水视频一区| 国产亚洲欧洲高清一区| 亚洲无线码在线一区观看| 日韩在线观看免费全| 精品少妇一区二区30p| 国产91露脸中文字幕在线| 国产999视频| 国产精品女视频| 欧美性色19p| 国产精品高潮在线| 欧美理论片在线观看| 精品无人区太爽高潮在线播放|