【一个java的DES加解密类转换成C#】

一个java的des加密解密代码如下:

  //package com.visionsky.util;

  import java.security.*;

  //import java.util.regex.Pattern;

  //import java.util.Hashtable;

  import javax.crypto.*;

  import javax.crypto.spec.*;

  import sun.misc.*;

  /**

  * des加密解密

  */

  public class DESPlus {

  private static String strDefaultKey = "PLFP"; //默认密钥

  private static final byte[] iv = {0x12, 0x34, 0x56, 0x78, (byte) 0x90, (byte) 0xab, (byte) 0xcd, (byte) 0xef};//des 向量

  private static BASE64Encoder enc = new BASE64Encoder();//将byte[]转换成String

  private static BASE64Decoder dec = new BASE64Decoder(); //将String转换成byte[]

  /**

  * 加密字节数组

  *

  * @param arrB

  *            需加密的字节数组

  * @param key

  *            密钥

  * @return 加密后的字节数组

  * @throws Exception

  */

  public static byte[] encrypt(byte[] arrB, String key) throws Exception {

  DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());

  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

  SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

  IvParameterSpec ivp = new IvParameterSpec(DESPlus.iv);

  Cipher encryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

  encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey, ivp);

  return encryptCipher.doFinal(arrB);

  }

  /**

  * 加密字符串

  *

  * @param xml

  *            需加密的字符串

  * @param key

  *            密钥

  * @return 加密后的字符串

  * @throws Exception

  */

  public static String encrypt(String xml, String key) throws Exception {

  //return DESPlus.enc.encode(encrypt(xml.getBytes(), key));

  return new String(encrypt(xml.getBytes(), key));

  }

  /**

  * 使用默认公钥加密字符串

  * @param xml 需加密的字符串

  * @return 加密后的字符串

  * @throws Exception

  */

  public static String encrypt(String xml) throws Exception {

  return encrypt(xml, strDefaultKey);

  }

  /**

  * 解密字节数组

  *

  * @param arrB

  *            需解密的字节数组

  * @param key

  *            密钥

  * @return 解密后的字节数组

  * @throws Exception

  */

  public static byte[] decrypt(byte[] arrB, String key) throws Exception {

  DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());

  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");

  SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

  IvParameterSpec ivp = new IvParameterSpec(DESPlus.iv);

  Cipher decryptCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");

  decryptCipher.init(Cipher.DECRYPT_MODE, secretKey, ivp);

  return decryptCipher.doFinal(arrB);

  }

  /**

  * 解密字符串

  *

  * @param xml

  *            需解密的字符串

  * @param key

  *            密钥

  * @return 解密后的字符串

  * @throws Exception

  */

  public static String decrypt(String xml, String key) throws Exception {

  return new String(decrypt(DESPlus.dec.decodeBuffer(xml), key));

  }

  /**

  * 使用默认公钥解密字符串

  * @param xml 需解密的字符串

  * @return 解密后的字符串

  * @throws Exception

  */

  public static String decrypt(String xml) throws Exception {

  return decrypt(xml, strDefaultKey);

  }

  /**

  * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位

  *

  * @param arrBTmp

  *            构成该字符串的字节数组

  * @return 生成的密钥

  * @throws java.lang.Exception

  */

  private Key getKey(byte[] arrBTmp) throws Exception {

  // 创建一个空的8位字节数组(默认值为0)

  byte[] arrB = new byte[8];

  // 将原始字节数组转换为8位

  for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {

  arrB[i] = arrBTmp[i];

  }

更多精彩教程请关注: XP系统下载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值