zoukankan      html  css  js  c++  java
  • C# Java的加密的各种折腾

    24位加密

    Java

    public class DESUtil {
    
        private static final String KEY_ALGORITHM = "DESede";
    
        private static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";
    
        private static final String ENCODING = "UTF-8";
    
        /**
         *
         * @param data body的JSON字符串
         * @param key 腾住提供的DesSecret密钥
         * @return
         */
        public static String encrypt(String data, String key) {
            byte[] encrypt = encrypt(data.getBytes(Charset.forName(ENCODING)), key);
            return encrypt == null ? null : Base64.encodeBase64String(encrypt);
        }
    
        private static byte[] encrypt(byte[] data, String key) {
            try {
                //实例化Des密钥
                DESedeKeySpec dks = new DESedeKeySpec(key.getBytes());
                //实例化密钥工厂
                SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
                //生成密钥
                SecretKey secretKey = keyFactory.generateSecret(dks);
                //实例化
                Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
                //初始化,设置为加密模式
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);
                return cipher.doFinal(data);
            } catch (InvalidKeyException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (InvalidKeySpecException e) {
                e.printStackTrace();
            } catch (NoSuchPaddingException e) {
                e.printStackTrace();
            } catch (IllegalBlockSizeException e) {
                e.printStackTrace();
            } catch (BadPaddingException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    

    对应的C#

    
     public static string Encrypt(string data, string key)
            {
    
    
                if (key.Length > 24)
                    key = key.Substring(0, 24);
    
                TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider()
                {
                    Mode = CipherMode.ECB,
                    Padding = PaddingMode.PKCS7,
                    Key = Encoding.UTF8.GetBytes(key)
                };
                using (MemoryStream ms = new MemoryStream())
                {
                    CryptoStream cStream = new CryptoStream(ms, tdsp.CreateEncryptor(), CryptoStreamMode.Write);
                    var buffer = Encoding.UTF8.GetBytes(data);
                    cStream.Write(buffer, 0, buffer.Length);
                    cStream.FlushFinalBlock();
                    cStream.Close();
                    return Convert.ToBase64String(ms.ToArray());
                }
            }
    

    C#8位解密

               private string Des(string pToEncrypt, string key)
                {
                    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                    des.Mode = CipherMode.ECB;
                    //des.Mode = CipherMode.CBC;
                    des.Padding = PaddingMode.PKCS7;
                    var buffer = UTF8Encoding.UTF8.GetBytes(key).Take(8).ToArray();
                    des.Key = des.IV = buffer;
    
                    using (MemoryStream ms = new MemoryStream())
                    {
                        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                        byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);
                        cs.Write(inputByteArray, 0, inputByteArray.Length);
                        cs.FlushFinalBlock();
                        return HttpUtility.UrlEncode(Convert.ToBase64String(ms.ToArray()));//  Encoding.UTF8.GetString(ms.ToArray());
    
                    }
                }
    

    C# 16 加密

                byte[] keyArray = Encoding.UTF8.GetBytes(Secret);// Convert.FromBase64String(Secret);
                byte[] toEncryptArray = JsonHelper.SerializeObject(q);
    
                RijndaelManaged rDel = new RijndaelManaged();
                rDel.Key = keyArray;
                rDel.Mode = CipherMode.ECB;
                rDel.Padding = PaddingMode.PKCS7;
    
                ICryptoTransform cTransform = rDel.CreateEncryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                return Convert.ToBase64String(resultArray, 0, resultArray.Length);
    
    
    
  • 相关阅读:
    hdu 5115 Dire Wolf 区间DP
    泛型兼容的注意事项
    maven web项目不能创建src/main/java等文件夹的问题
    error the @annotation pointcut expression is only supported at Java 5
    HashSet重复元素判断
    oracle 分库分表(sharding)
    关系型数据库分库分表解决方案
    JDK7中匿名内部类中使用局部变量要加final,JDK8中不需要,但jdk会默认加上final
    eclipse中更改配置使得switch语句不出错
    java io流中怎么在一个文本中追加字符串
  • 原文地址:https://www.cnblogs.com/catzhou/p/10942183.html
Copyright © 2011-2022 走看看