Share two Java C # turn encryption and decryption algorithms

Recent always met docking and other items, other projects using JAVA, for when you call api usually designed to decrypt the encrypted parameters. This is when you need the other side of the encryption algorithm again in C #.

Directly on the code.

Java

 private static byte[] iv = {1,2,3,4,5,6,7,8};    
    public static String encryptDES(String encryptString, String encryptKey) throws Exception {    
//      IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);    
        IvParameterSpec zeroIv = new IvParameterSpec(iv);    
        SecretKeySpec key = new SecretKeySpec(encryptKey.getBytes("utf-8"), "DES");    
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");    
        cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);    
        byte[] encryptedData = cipher.doFinal(encryptString.getBytes("utf-8"));    
         
        return Base64_BAK.encode(encryptedData);    
    }    
    public static String decryptDES(String decryptString, String decryptKey) throws Exception {    
        byte[] byteMi = new Base64_BAK().decode(decryptString);    
        IvParameterSpec zeroIv = new IvParameterSpec(iv);    
//      IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);    
        SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes("utf-8"), "DES");    
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");    
        cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);    
        byte decryptedData[] = cipher.doFinal(byteMi);    
        String retrdecryptedData = new String(decryptedData,"UTF-8");
        return retrdecryptedData;    
    }   

  To encode characters code

class Base64_BAK {    
    private static final char[] legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();    
    /**  
     * data[]进行编码  
     * @param data  
     * @return  
     */    
        public static String encode(byte[] data) {    
            int start = 0;    
            int len = data.length;    
            StringBuffer buf = new StringBuffer(data.length * 3 / 2);    
    
            int end = len - 3;    
            int i = start;    
            int n = 0;    
    
            while (i <= end) {    
                int d = ((((int) data[i]) & 0x0ff) << 16)    
                        | ((((int) data[i + 1]) & 0x0ff) << 8)    
                        | (((int) data[i + 2]) & 0x0ff);    
    
                buf.append(legalChars[(d >> 18) & 63]);    
                buf.append(legalChars[(d >> 12) & 63]);    
                buf.append(legalChars[(d >> 6) & 63]);    
                buf.append(legalChars[d & 63]);    
    
                i += 3;    
    
                if (n++ >= 14) {    
                    n = 0;    
                    buf.append(" ");    
                }    
            }    
    
            if (i == start + len - 2) {    
                int d = ((((int) data[i]) & 0x0ff) << 16)    
                        | ((((int) data[i + 1]) & 255) << 8);    
    
                buf.append(legalChars[(d >> 18) & 63]);    
                buf.append(legalChars[(d >> 12) & 63]);    
                buf.append(legalChars[(d >> 6) & 63]);    
                buf.append("=");    
            } else if (i == start + len - 1) {    
                int d = (((int) data[i]) & 0x0ff) << 16;    
    
                buf.append(legalChars[(d >> 18) & 63]);    
                buf.append(legalChars[(d >> 12) & 63]);    
                buf.append("==");    
            }    
    
            return buf.toString();    
        }    
    
        private static int decode(char c) {    
            if (c >= 'A' && c <= 'Z')    
                return ((int) c) - 65;    
            else if (c >= 'a' && c <= 'z')    
                return ((int) c) - 97 + 26;    
            else if (c >= '0' && c <= '9')    
                return ((int) c) - 48 + 26 + 26;    
            else    
                switch (c) {    
                case '+':    
                    return 62;    
                case '/':    
                    return 63;    
                case '=':    
                    return 0;    
                default:    
                    throw new RuntimeException("unexpected code: " + c);    
                }    
        }    
    
        /**  
         * Decodes the given Base64 encoded String to a new byte array. The byte  
         * array holding the decoded data is returned.  
         */    
    
        public static byte[] decode(String s) {    
    
            ByteArrayOutputStream bos = new ByteArrayOutputStream();    
            try {    
                decode(s, bos);    
            } catch (IOException e) {    
                throw new RuntimeException();    
            }    
            byte[] decodedBytes = bos.toByteArray();    
            try {    
                bos.close();    
                bos = null;    
            } catch (IOException ex) {    
                System.err.println("Error while decoding BASE64: " + ex.toString());    
            }    
            return decodedBytes;    
        }    
    
        private static void decode(String s, OutputStream os) throws IOException {    
            int i = 0;    
    
            int len = s.length();    
    
            while (true) {    
                while (i < len && s.charAt(i) <= ' ')    
                    i++;    
    
                if (i == len)    
                    break;    
    
                int tri = (decode(s.charAt(i)) << 18)    
                        + (decode(s.charAt(i + 1)) << 12)    
                        + (decode(s.charAt(i + 2)) << 6)    
                        + (decode(s.charAt(i + 3)));    
    
                os.write((tri >> 16) & 255);    
                if (s.charAt(i + 2) == '=')    
                    break;    
                os.write((tri >> 8) & 255);    
                if (s.charAt(i + 3) == '=')    
                    break;    
                os.write(tri & 255);    
    
                i += 4;    
            }    
    }

  C # corresponding encryption and decryption algorithm is as follows

   static String encode(byte[] data)
        {
            int start = 0;
            int len = data.Length;
            StringBuilder buf = new StringBuilder(data.Length * 3 / 2);
            var legalChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".ToCharArray();
            int end = len - 3;
            int i = start;
            int n = 0;

            while (i <= end)
            {
                int d = ((((int)data[i]) & 0x0ff) << 16)
                        | ((((int)data[i + 1]) & 0x0ff) << 8)
                        | (((int)data[i + 2]) & 0x0ff);

                buf.Append(legalChars[(d >> 18) & 63]);
                buf.Append(legalChars[(d >> 12) & 63]);
                buf.Append(legalChars[(d >> 6) & 63]);
                buf.Append(legalChars[d & 63]);

                i += 3;

                if (n++ >= 14)
                {
                    n = 0;
                    buf.Append(" ");
                }
            }

            if (i == start + len - 2)
            {
                int d = ((((int)data[i]) & 0x0ff) << 16)
                        | ((((int)data[i + 1]) & 255) << 8);

                buf.Append(legalChars[(d >> 18) & 63]);
                buf.Append(legalChars[(d >> 12) & 63]);
                buf.Append(legalChars[(d >> 6) & 63]);
                buf.Append("=");
            }
            else if (i == start + len - 1)
            {
                int d = (((int)data[i]) & 0x0ff) << 16;

                buf.Append(legalChars[(d >> 18) & 63]);
                buf.Append(legalChars[(d >> 12) & 63]);
                buf.Append("==");
            }

            return buf.ToString();
        }
        private static string Encrypt(string str, string sKey, byte[] iv)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = Encoding.Default.GetBytes(str);
            des.Key = ASCIIEncoding.ASCII.GetBytes (sKey); // key
            //byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
            des.IV = iv;// 初始化向量
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            var retB = encode(ms.ToArray());
            return retB;
        }

        private static string Decrypt(string pToDecrypt, string sKey,byte[] iv)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
            //byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
            = ASCIIEncoding.ASCII.GetBytes des.Key (sKey);
            IV = des.IV; 
            the MemoryStream the MemoryStream new new MS = (); 
            the CryptoStream new new CS = the CryptoStream (MS, des.CreateDecryptor (), CryptoStreamMode.Write); 
            cs.Write (The inputByteArray, 0, inputByteArray.Length); 
            // if two key times are not the same, this step could trigger an exception 
            cs.FlushFinalBlock (); 

            return System.Text.Encoding.Default.GetString (ms.ToArray ()); 
        }

  Java encryption and decryption algorithms

  public static String decryptDES(String decryptString, String decryptKey) throws Exception {
        String afterDecryptString = null;
        byte[] byteMi = new Base64().decode(decryptString);
        try {
            SecretKeySpec key = new SecretKeySpec(decryptKey.getBytes(), "DES");
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(2, key);
            byte[] decryptData = cipher.doFinal(byteMi);
            afterDecryptString = new String(decryptData, "UTF-8");
        } catch (Exception e) {
            log.error("decryptDES error", e);
            throw e;
        }
        return afterDecryptString;
    }

  C # code

  public static string Decrypt(string pToDecrypt, string sKey)
        {
           
            //var inputByteArray = ASCIIEncoding.ASCII.GetBytes(pToDecrypt);
            byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);
           
            using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()) {
                //des.Padding =PaddingMode.PKCS7;
                des.Mode = CipherMode.ECB;
                des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
                des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(inputByteArray, 0, inputByteArray.Length);
                    cs.FlushFinalBlock();
                    cs.Close();
                }
                string str = Encoding.UTF8.GetString(ms.ToArray());
                ms.Close();
                return str;
            }
        }

  

 

Guess you like

Origin www.cnblogs.com/Playfunny/p/11428934.html