C# des逻辑转 java des

C# 代码块 

public static string Encrypt(string Text, string sKey)
{
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();  //声明一个工具类DES
    byte[] inputByteArray;
    inputByteArray = Encoding.Default.GetBytes(Text);   //  输入的密码转byte[]

    des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));  // 工具类的key设置
    处理方式:key 进行md5 哈希  然后截取前8位 
    des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));// 工具类的IV设置
    System.IO.MemoryStream ms = new System.IO.MemoryStream(); //声明流对象
    CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);   //设置流对象参数
    cs.Write(inputByteArray, 0, inputByteArray.Length);  //执行写入ms
    cs.FlushFinalBlock();  //字节流结束关闭
    StringBuilder ret = new StringBuilder();
    foreach (byte b in ms.ToArray())  //遍历ms
    {
        ret.AppendFormat("{0:X2}", b);  //转16进制字节流
    }
    return ret.ToString();
}

对应java 代码

public static String pwd(String pwd,String sKey){
    pwd = pwd.toLowerCase(Locale.ROOT);
    byte[] bytes = encrypt(pwd,sKey);
    StringBuilder stringBuilder = new StringBuilder();
    for (byte b:bytes
         ) {
        stringBuilder.append(String.format("%02x",b));
    }
    String ss = stringBuilder.toString().toLowerCase(Locale.ROOT);
    return ss;
}
public static byte[] encrypt(String pwd,String sKey){
    String k = hashString(sKey,"MD5").substring(0,8).toUpperCase(Locale.ROOT);
    try {
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");  //声明工具类  CBC模式
        DESKeySpec dks = new DESKeySpec(k.getBytes("utf-8"));
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        Key secretKey = keyFactory.generateSecret(dks);    //工具类的key设置
        IvParameterSpec iv = new IvParameterSpec(k.getBytes("utf-8"));  //工具类的IV设置  偏移量
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        return cipher.doFinal(pwd.getBytes("UTF-8"));
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

}

/**
 * 进行hash
 * @param input
 * @param algorithm
 * @return
 */
public static String hashString(String input, String algorithm) {
    try {
        MessageDigest digest = MessageDigest.getInstance(algorithm);
        byte[] bytes = digest.digest(input.getBytes());
        StringBuilder sb = new StringBuilder();
        // 打印哈希值的字节表示
        for (byte b : bytes) {
            sb.append(String.format("%02x",b));  //转
        }
        return sb.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }
}

public static void main(String[] args) {
    String key = "*******";
    String value="********";
    String a=pwd(value,key);
    System.out.println(a);
}
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值