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 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/catzhou/p/10942183.html
Copyright © 2011-2022 走看看