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);
    
    
    
  • 相关阅读:
    sniffer 和 debug flow
    如何认识TOS----DSCP 对照表
    NAT alg 和 ASPF
    使用refind引导多系统
    Backdooring a OS VM
    exit(0)与exit(1),return三者区别(详解)
    Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
    2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
    高斯消元法(Gauss Elimination)【超详解&模板】
    2015 计蒜之道 初赛(4)爱奇艺的自制节目(枚举 贪心)
  • 原文地址:https://www.cnblogs.com/catzhou/p/10942183.html
Copyright © 2011-2022 走看看