zoukankan      html  css  js  c++  java
  • 每日踩坑 2020-04-15 C# 与 Java 对应 DES 加密算法

    最近公司项目有个对接Java系统的接口,之前也有一个另外的对接。

    一有什么对接就全让我做,哭了。有名的加密模式都搞了一遍了。真的是心累。

    这次这个玩意卡了我一天,但其实是个很简单的问题。

    主要的坑有两个:

    1.对解方给的密钥是32位的,事实上java是默认取密钥前8位,不够报错。而 C# 是必须传进去8位,不然就报错

    2. 当java用 Cipher.getInstance("DES")  传参只传 DES 时,加密模式是 ECB  !!!!!!!!!

    大部分讲C#与JAVA对应该加密算法的文章讲的是 Cipher.getInstance("DES/CBC/PKCS5Padding"); 这种传参。

    java方法:

            //   private static byte[] encrypt(String data, String password) throws Exception
            //   {
            //       byte[] datasource = data.getBytes("UTF-8");
            //       SecureRandom random = new SecureRandom();
            //       DESKeySpec desKey = new DESKeySpec(password.getBytes());
            //       SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            //       javax.crypto.SecretKey securekey = keyFactory.generateSecret(desKey);
            //       Cipher cipher = Cipher.getInstance("DES");
            //       cipher.init(1, securekey, random);
            //       return cipher.doFinal(datasource);
            //}

    C#方法:

    public static string Encrypt(string data, string key)
            {
                //data = "8P5z$BDvxr8Uu6L?";
                //key = "DqY7R9v3HbRbvTeZv1YArg3a7msPX6J8";
    
                key = key.Substring(0, 8);
                byte[] byteData = Encoding.UTF8.GetBytes(data);
                byte[] byteKey = Encoding.UTF8.GetBytes(key);
                DESCryptoServiceProvider desProcider = new DESCryptoServiceProvider();
                //DES一共有电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种模式,
                //desProcider.Mode = CipherMode.CBC;
                desProcider.Mode = CipherMode.ECB;
                //desProcider.Padding = PaddingMode.PKCS7;
                desProcider.Key = byteKey;
                desProcider.IV = byteKey;
    
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, desProcider.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(byteData, 0, byteData.Length);
                cs.FlushFinalBlock();
                var result = Convert.ToBase64String(ms.ToArray());
                return result;
            }
  • 相关阅读:
    大二下学期团队项目(app端web请求)
    大二下每周总结
    大二下学期团队项目(手机端分类查询前端)
    Windows 2008 R2 64位下安装Oracle 10.2.0.5
    Win7 32位下安装Oracle 10g
    SQL Developer安装使用教程
    Oracle使用DBCA建立数据库实例
    史上最全Oracle安装配置图文教程,含TNS配置
    Oracle9i完美安装、配置及操作
    安装MySQL启动服务时报错解决办法,错误代码1045
  • 原文地址:https://www.cnblogs.com/Aaxuan/p/12707199.html
Copyright © 2011-2022 走看看