zoukankan      html  css  js  c++  java
  • C#对接JAVA系统遇到的AES加密坑

    起因对接合作伙伴的系统,需要对数据进行AES加密

    默认的使用了已经写好的帮助类中加密算法,发现结果不对,各种尝试改变加密模式改变向量等等折腾快一下午。最后网上查了下AES在JAVA里面的实现完整代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public static String AesEncrypt(String content,String encyKey) {           
            try {                  
                KeyGenerator kgen = KeyGenerator.getInstance("AES");
                SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");  
                secureRandom.setSeed(encyKey.getBytes());  
                kgen.init(128, secureRandom);
                Cipher cipher=Cipher.getInstance("AES");       
                cipher.init(Cipher.DECRYPT_MODE,new SecretKeySpec(kgen.generateKey().getEncoded(),"AES"));         
                byte[] byteContent = content.getBytes("utf-8");
                byte[] result = cipher.doFinal(byteContent);           
                BASE64Encoder  encode = new BASE64Encoder ();
                String strResult=encode.encode(result);
                return strResult;
            catch (Exception e) {
                e.printStackTrace();
            }
            return null;
      }

     根据博主:http://www.cnblogs.com/amylis_chen/p/6107162.html#commentform  的经验有了思路

    解决办法,通过JAVA代码生成AES的密钥,再通过C#代码进行AES加密

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    //JAVA代码生成密钥
            String encyKey="合作伙伴提供的密钥 ";
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            java.security.SecureRandom random = java.security.SecureRandom.getInstance("SHA1PRNG");
            random.setSeed(encyKey.getBytes());
            kgen.init(128, random); 
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            BASE64Encoder coder = new BASE64Encoder();       
            System.out.println(coder.encode(enCodeFormat));

    C#代码进行AES加密

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class Program
       {
           static void Main(string[] args)
           {
               //默认密钥向量
               var result = AESEncode("123456""JAVA代码输出的密钥");
               Console.WriteLine(result);
               Console.ReadLine();
     
           }
           public static string AESEncode(string encryptString, string encryptKey)
           {
               if (string.IsNullOrEmpty(encryptString)) return null;
               Byte[] toEncryptArray = Encoding.UTF8.GetBytes(encryptString);
               RijndaelManaged rm = new RijndaelManaged
               {
                   Key = Convert.FromBase64String(encryptKey),
                   Mode = CipherMode.ECB,
                   Padding = PaddingMode.PKCS7
               };
               ICryptoTransform cTransform = rm.CreateEncryptor();
               Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
               return Convert.ToBase64String(resultArray, 0, resultArray.Length);
           }
       }
  • 相关阅读:
    sencha touch 扩展篇之将sencha touch打包成安装程序(上)- 使用sencha cmd打包安装程序
    sencha touch 扩展篇之使用sass自定义主题样式 (下)通过css修改官方组件样式以及自定义图标
    一个不错的android组件的网站
    sencha touch 扩展篇之使用sass自定义主题样式 (上)使用官方的api修改主题样式
    sencha touch 入门系列 (九) sencha touch 布局layout
    面试题总结
    国外接活网站Elance, Freelancer和ScriptLance的介绍和对比
    sencha touch 入门系列 扩展篇之sencha touch 项目打包压缩
    Android Design Support Library——Navigation View
    设计模式——命令模式
  • 原文地址:https://www.cnblogs.com/tsql/p/9435711.html
Copyright © 2011-2022 走看看