当前位置: 首页 > news >正文

.NET与 java通用的3DES加密解密方法

C#代码

   private void button1_Click(object sender, EventArgs e)  
        {  
            string jiami = textBox1.Text;  
           textBox2.Text= DESEnCode(jiami, "11111111");  
        }  
  
          public static string DES_Key = "11111111";    
  
    #region DESEnCode DES加密     
    public static string DESEnCode(string pToEncrypt, string sKey)     
    {  
       // string pToEncrypt1 = HttpContext.Current.Server.UrlEncode(pToEncrypt);     
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();  
        byte[] inputByteArray = Encoding.GetEncoding("UTF-8").GetBytes(pToEncrypt);     
    
        //建立加密对象的密钥和偏移量      
        //原文使用ASCIIEncoding.ASCII方法的GetBytes方法      
        //使得输入密码必须输入英文文本      
        des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);     
        des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);     
        MemoryStream ms = new MemoryStream();     
        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);     
    
        cs.Write(inputByteArray, 0, inputByteArray.Length);     
        cs.FlushFinalBlock();     
    
        StringBuilder ret = new StringBuilder();     
        foreach (byte b in ms.ToArray())     
        {     
            ret.AppendFormat("{0:X2}", b);     
        }     
        ret.ToString();     
        return ret.ToString();     
    }    
    #endregion    
  
    #region DESDeCode DES解密     
    public static string DESDeCode(string pToDecrypt, string sKey)     
    {     
        //    HttpContext.Current.Response.Write(pToDecrypt + "<br>" + sKey);     
        //    HttpContext.Current.Response.End();     
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();     
    
        byte[] inputByteArray = new byte[pToDecrypt.Length / 2];     
        for (int x = 0; x < pToDecrypt.Length / 2; x++)     
        {     
            int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));     
            inputByteArray[x] = (byte)i;     
        }     
    
        des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);     
        des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);     
       MemoryStream ms = new MemoryStream();     
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);     
        cs.Write(inputByteArray, 0, inputByteArray.Length);     
        cs.FlushFinalBlock();     
    
        StringBuilder ret = new StringBuilder();     
    
       // return HttpContext.Current.Server.UrlDecode(System.Text.Encoding.Default.GetString(ms.ToArray()));  
        return System.Text.Encoding.Default.GetString(ms.ToArray());    
    }    
    #endregion     
  
    private void button2_Click(object sender, EventArgs e)  
    {  
        string jiemi = textBox2.Text;  
        textBox3.Text = DESDeCode(jiemi,"11111111");  
    }  

Java代码

import javax.crypto.Cipher;     
import javax.crypto.SecretKey;     
import javax.crypto.SecretKeyFactory;     
import javax.crypto.spec.DESKeySpec;     
import javax.crypto.spec.IvParameterSpec;     
    
    
public class Des {     
    private byte[] desKey;     
    
         
    //解密数据     
    public static String decrypt(String message,String key) throws Exception {     
              
            byte[] bytesrc =convertHexString(message);        
            Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");         
            DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));        
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");        
            SecretKey secretKey = keyFactory.generateSecret(desKeySpec);        
            IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));     
                     
            cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);           
               
            byte[] retByte = cipher.doFinal(bytesrc);          
            return new String(retByte);      
    }     
    
    public static byte[] encrypt(String message, String key)     
            throws Exception {     
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");     
    
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes("UTF-8"));     
    
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");     
        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);     
        IvParameterSpec iv = new IvParameterSpec(key.getBytes("UTF-8"));     
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);     
    
        return cipher.doFinal(message.getBytes("UTF-8"));     
    }     
         
    public static byte[] convertHexString(String ss)      
    {      
    byte digest[] = new byte[ss.length() / 2];      
    for(int i = 0; i < digest.length; i++)      
    {      
    String byteString = ss.substring(2 * i, 2 * i + 2);      
    int byteValue = Integer.parseInt(byteString, 16);      
    digest[i] = (byte)byteValue;      
    }      
    
    return digest;      
    }      
    
    
    public static void main(String[] args) throws Exception {     
        String key = "11111111";     
        String value="aa";     
        String jiami=java.net.URLEncoder.encode(value, "utf-8").toLowerCase();     
             
        System.out.println("加密数据:"+jiami);     
        String a=toHexString(encrypt(jiami, key)).toUpperCase();     
             
         
        System.out.println("加密后的数据为:"+a);     
        String b=java.net.URLDecoder.decode(decrypt(a,key), "utf-8") ;     
        System.out.println("解密后的数据:"+b);     
    
    }     
    
         
    public static String toHexString(byte b[]) {     
        StringBuffer hexString = new StringBuffer();     
        for (int i = 0; i < b.length; i++) {     
            String plainText = Integer.toHexString(0xff & b[i]);     
            if (plainText.length() < 2)     
                plainText = "0" + plainText;     
            hexString.append(plainText);     
        }     
             
        return hexString.toString();     
    }     
    
}    

摘抄:http://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html

https://en.wikipedia.org/wiki/Initialization_vector

转载于:https://www.cnblogs.com/TBW-Superhero/p/6296775.html

相关文章:

  • 学习Java--JDK的下载安装和配置
  • 掘金吉祥物设计全过程(内幕揭秘)
  • Asp.net MVC 示例项目Suteki.Shop分析之---Controller
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • 图书馆的借阅书刊的案例 UML Modelling
  • text段,data段,bss段,堆和栈
  • Ie8下运行的页面居中显示的问题
  • copy.c实现
  • SQl 语句(常见) 新建,删除,修改表结构
  • CCF201609-1 最大波动(100分)
  • SQL不重复记录
  • Ruby 2.x 源代码分析:扩展 概述
  • 淘宝网Open API 入门教程
  • css3中追加的三种选择器
  • 终于安装成功了
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 78. Subsets
  • AWS实战 - 利用IAM对S3做访问控制
  • gulp 教程
  • Idea+maven+scala构建包并在spark on yarn 运行
  • oldjun 检测网站的经验
  • PHP 7 修改了什么呢 -- 2
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 初识MongoDB分片
  • 聊聊redis的数据结构的应用
  • 我感觉这是史上最牛的防sql注入方法类
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • Linux权限管理(week1_day5)--技术流ken
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​Java并发新构件之Exchanger
  • ​Linux·i2c驱动架构​
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #includecmath
  • (12)Linux 常见的三种进程状态
  • (C语言)fgets与fputs函数详解
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (pojstep1.1.2)2654(直叙式模拟)
  • (ros//EnvironmentVariables)ros环境变量
  • (备忘)Java Map 遍历
  • (二)构建dubbo分布式平台-平台功能导图
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (原創) 未来三学期想要修的课 (日記)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)c++ std::pair 与 std::make
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)OpenStack Hacker养成指南
  • *2 echo、printf、mkdir命令的应用
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET CORE使用Redis分布式锁续命(续期)问题
  • .Net IE10 _doPostBack 未定义
  • .NET MVC第三章、三种传值方式
  • .NET 命令行参数包含应用程序路径吗?