java与.net des加解密 方法解析

来源:互联网 发布:kenzo知乎 编辑:程序博客网 时间:2024/06/16 07:35

java的des的加密和解密以及c#的加密和解密的方法:

DES加密
DES是一种对称加密(Data Encryption Standard)算法 ,两个关键点,第一个是加密算法,第二个是数据补位。

加密算法常见的有ECB模式和CBC模式:
ECB模式:电子密本方式,这是JAVA封装的DES算法的默认模式,就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后一段不足8个字节,则补足8个字节(注意:这里就涉及到数据补位了)进行计算,之后按照顺序将计算所得的数据连在一起即可,各段数据之间互不影响。

CBC模式:密文分组链接方式,这是.NET封装的DES算法的默认模式,它比较麻烦,加密步骤如下:
1、首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,就涉及到数据补位了)
2、第一组数据D1与向量I异或后的结果进行DES加密得到第一组密文C1(注意:这里有向量I的说法,ECB模式下没有使用向量I)
3、第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
4、之后的数据以此类推,得到Cn
5、按顺序连为C1C2C3......Cn即为加密结果。

一、java的des加密和解密


//des加密后base64public String DESEncrypt(String inputData, String inputKey)throws Exception {byte[] DESkey = inputKey.getBytes();// 设置密钥DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂Key key = keyFactory.generateSecret(keySpec);// 得到密钥对象Cipher enCipher = Cipher.getInstance("DES/ECB/PKCS5Padding");// 得到加密对象CipherenCipher.init(Cipher.ENCRYPT_MODE, key);// 设置工作模式为加密模式,给出密钥和向量byte[] pasByte = enCipher.doFinal(inputData.getBytes("utf-8"));BASE64Encoder base64Encoder = new BASE64Encoder();return base64Encoder.encode(pasByte);}      //先反base64,然后public static String DESDecrypt(String inputData, String inputKey)throws Exception {BASE64Decoder base64Decoder = new BASE64Decoder();byte[] byteInputData = base64Decoder.decodeBuffer(inputData);byte[] DESkey = inputKey.getBytes();// 设置密钥DESKeySpec keySpec = new DESKeySpec(DESkey);// 设置密钥参数SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 获得密钥工厂Key key = keyFactory.generateSecret(keySpec);// 得到密钥对象// using DES in ECB modeCipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");// 用密匙初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, key);byte decryptedData[] = cipher.doFinal(byteInputData);String value = new String(decryptedData, "UTF-8");return value;// decryptedData;}public String GetUtcTime(String format) throws Exception {if (format == "") {format = "yyyy-MM-dd hh:mm";}DateFormat gmtFormat = new SimpleDateFormat(format);TimeZone gmtTime = TimeZone.getTimeZone("UTC");gmtFormat.setTimeZone(gmtTime);Calendar calendar = java.util.Calendar.getInstance();return gmtFormat.format(calendar.getTime());}



二、c#的加密和解密

 /// <summary>        /// 默认使用ECB模式进行加密         /// </summary>        /// <param name="strToEncrypt"></param>        /// <param name="sKey"></param>        /// <param name="paddingMode"></param>        /// <returns>返回的是二进制数据转换为Base64字符串</returns>        public static string DESEncrypt(string strToEncrypt, string sKey, PaddingMode paddingMode = PaddingMode.PKCS7)        {            var result = string.Empty;            using (var objDesCryptoServiceProvider = new DESCryptoServiceProvider())            {                byte[] inputByteArray = Encoding.UTF8.GetBytes(strToEncrypt);                objDesCryptoServiceProvider.Key = Encoding.UTF8.GetBytes(sKey);                objDesCryptoServiceProvider.Mode = CipherMode.ECB;                objDesCryptoServiceProvider.Padding = paddingMode;                byte[] bysEncrypted =                    objDesCryptoServiceProvider.CreateEncryptor().TransformFinalBlock(inputByteArray, 0, inputByteArray.Length);                result = Convert.ToBase64String(bysEncrypted);            }            return result;        }                 /// <summary>        /// 默认使用ECB模式进行解密        /// </summary>        /// <param name="strToDecrypt">输入的是Base64字符串的密文</param>        /// <param name="sKey"></param>        /// <param name="paddingMode"></param>        /// <returns></returns>        public static string DESDecrypt(string strToDecrypt, string sKey, PaddingMode paddingMode = PaddingMode.PKCS7)        {            var result = string.Empty;            using (var objDesCryptoServiceProvider = new DESCryptoServiceProvider())            {                 byte[] inputByteArray = Convert.FromBase64String(strToDecrypt);                 objDesCryptoServiceProvider.Key = Encoding.UTF8.GetBytes(sKey);                 objDesCryptoServiceProvider.Mode = CipherMode.ECB;                 objDesCryptoServiceProvider.Padding = paddingMode;                using (var ms = new MemoryStream())                {                    using (var cs = new CryptoStream(ms, objDesCryptoServiceProvider.CreateDecryptor(), CryptoStreamMode.Write))                    {                        cs.Write(inputByteArray, 0, inputByteArray.Length);                        cs.FlushFinalBlock();                        result = Encoding.UTF8.GetString(ms.ToArray()).Replace('\0', ' ');//Zeros模式下去掉多余的补位                    }                }            }            return result;        } 


三、java打包成jar供外部调用

http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 

首先下载fat jar,地址:http://sourceforge.net/project/showfiles.php?group_id=115990&package_id=125924
下载后,解压缩,有一个plugins文件夹,里面有个jar包。

将这个文件夹放入myeclipse的dropins目录,这里我的路径是D:/Program Files/Genuitec/MyEclipse 8.5/dropins,仅供参考。重启eclipse后,右键点击项目,可以看见一个带前面有绿色加号的选项->Build Fat Jar,就表示安装成功了。
如果你要把你的项目打包成一个可执行jar,右键点击项目->Build Fat Jar,出现一个界面。界面各属性如下设置:
Jar-name:你要生成的jar的名字
Manifest:最重要的配置文件,但这一步不需要你关心,不要改动
Main-Class:你的jar从哪个main函数启动
Class-path:通常是一个点“.”,如果你使用了外部类,那么还需设置外部类。

例如我的项目使用了jpcap.jar和jpcap.dll,那么我的path是“. jpcap.jar jpcap.dll”,千万记得那个点不能省略,同时外部类前面都要有个空格。这些属性会写入Manifest。
点下一步,出现一个界面让你选择将什么打包进去,选择你需要的类就可以了,那些外部依赖的包因为我们前面已经设置了,因此不要选。完成后会在你的工程目录下生成一个可执行的jar包,这个时候你再记得把你的外部类拷过来(即和这个jar包在同一目录下),OK!

 


参考:

des 在线tools https://www.tools4noobs.com/online_tools/encrypt/ 

java中的des   http://www.cnblogs.com/xyzlmn/archive/2010/05/06/1729039.html

JAVA和.NET使用DES对称加密的区别 http://www.cnblogs.com/Lawson/archive/2012/05/20/2510781.html


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 头发被剪得很丑怎么办 淹脖子破皮了怎么办 孩子胖脖子淹了怎么办 宝宝屁股破皮了怎么办 新生儿屁屁发红及烂怎么办 头发烫完太蓬松怎么办 头发烫的太卷了怎么办 烫了卷发很毛躁怎么办 烫发后头发干枯毛躁怎么办 烫完头发掉发怎么办 烫发掉发严重该怎么办 烫头发后掉头发怎么办 烫过头发后毛躁怎么办 烫了头发像大妈怎么办 头发烫了之后很毛躁怎么办 鳄龟爪子烂了怎么办 乌龟壳边缘烂了怎么办 乌龟拉绿色的水怎么办 小乌龟龟壳变软怎么办 鳄龟不待在水里怎么办 脖子整天黏黏的怎么办 有脊椎侧弯跳舞怎么办 落枕10天还不好怎么办 落枕十几天没好怎么办 肩一边高一边低怎么办 35岁无稳定工作怎么办 机械手表走的快怎么办 机械表发条紧了怎么办 两只乌龟互相咬怎么办? 乌龟鼻子摔烂了怎么办 剃刀龟脖子肿了怎么办 遇见有戾气的人怎么办 身上的寒气太重怎么办 身体里寒气太重怎么办 做人事招不到人怎么办 苹果6cpu坏了怎么办 苹果6s升级不了怎么办 冬天打游戏手冷怎么办 漂流瓶不能用了怎么办 感冒鼻子闻不到味道怎么办 胃难受想吐头晕怎么办