当前位置:编程学习 > C#/ASP.NET >>

C#与java加密解密问题,跪求指导。。。。。

能否将下面的C#的加密解密方法转换成java的加密解密方法

  #region 'EnDeCryptogram加解密


        /// <summary>
        /// 默认对称密钥('1234567890') 静态变量
        /// </summary>
        static private string key = "1234567890"; //默认密钥 
        /// <summary>
        /// 机密密钥 字节数组静态变量


        /// </summary>
        static private byte[] skey;
        /// <summary>
        /// 对称算法的初始化向量 字节数组 静态变量


        /// </summary>
        static private byte[] siv;
        /// <summary>
        /// 随机数 静态变量


        /// </summary>
        private static Random random = null;

        //************************************************************************
        /// <summary> 
        /// 加密字符串 静态方法
        /// </summary> 
        /// <param name="inputStr">输入明文字符串</param> 
        /// <param name="keyStr">密钥,可以为""</param> 
        /// <returns>输出加密后字符串</returns>
        //************************************************************************
        public static string EncryptString(string inputStr, string keyStr)
        {
            try
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

                if (keyStr == "") keyStr = key; //此密钥默认为:1234567890

                byte[] inputByteArray = Encoding.Default.GetBytes(inputStr);//此与解密不同点1
                byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);

                SHA1 ha = new SHA1Managed();
                byte[] hb = ha.ComputeHash(keyByteArray);

                skey = new byte[8];
                siv = new byte[8];

                for (int i = 0; i < 8; i++) skey[i] = hb[i];
                for (int i = 8; i < 16; i++) siv[i - 8] = hb[i];

                des.Key = skey; // 取得机密密钥
                des.IV = siv;   // 取得初始化向量(作用-相当于随机'盐'值)
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);//此与解密不同点2

                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();

                StringBuilder ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:x2}", b);
                }

                cs.Close();
                ms.Close();

                return ret.ToString();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //************************************************************************
        /// <summary> 
        /// 解密字符串 静态方法
        /// </summary> 
        /// <param name="inputStr">要解密的字符串</param> 
        /// <param name="keyStr">密钥,可以为""</param> 
        /// <returns>解密后的结果</returns>
        //************************************************************************
        public static string DecryptString(string inputStr, string keyStr)
        {
            try
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();

                if (keyStr == "") keyStr = key;//此密钥默认为:1234567890

                byte[] inputByteArray = new byte[inputStr.Length / 2];//此与加密不同点1

                for (int x = 0; x < inputStr.Length / 2; x++) //此与加密不同点1
                {
                    int i = (Convert.ToInt32(inputStr.Substring(x * 2, 2), 16));
                    inputByteArray[x] = (byte)i;
                }

                byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);

                SHA1 ha = new SHA1Managed();

                byte[] hb = ha.ComputeHash(keyByteArray);

                skey = new byte[8];
                siv = new byte[8];

                for (int i = 0; i < 8; i++) skey[i] = hb[i];
                for (int i = 8; i < 16; i++) siv[i - 8] = hb[i];

                des.Key = skey; // 取得机密密钥
                des.IV = siv;   // 取得初始化向量(作用-相当于随机'盐'值)
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);//此与加密不同点2
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();

                StringBuilder ret = new StringBuilder();
                return System.Text.Encoding.Default.GetString(ms.ToArray());
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
--------------------编程问答-------------------- 求指导啊
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,