精华内容
下载资源
问答
  • DES对称加密算法

    2020-03-31 22:09:07
    问题 A: DES对称加密算法 时间限制: 1 Sec 内存限制: 128 MB 提交: 190 解决: 155 [提交][状态][讨论版][命题人:201001000549] 题目描述 参考相关文献,设计一个DES对称加密算法。并编写一个控制台应用予以验证。...

    问题 A: DES对称加密算法

    时间限制: 1 Sec 内存限制: 128 MB
    提交: 190 解决: 155
    [提交][状态][讨论版][命题人:201001000549]

    题目描述

    参考相关文献,设计一个DES对称加密算法。并编写一个控制台应用予以验证。密钥设定为:@1234567。
    class Program{
    //验证DES加密算法
    static void Main(string[] args){
    Console.WriteLine(Class1.ECP(“absg123@&!”));
    }
    }

    public class Class1 {
        //下面ECP方法功能为采用对称加密算法
        //该算法原理请大家百度
        const string KEY_64 = "@1234567";
        const string IV_64 = "@1234567";
        public static string ECP(string data)      {
              //这里编写DES对称加密算法代码
        }
    

    输入

    一个字符串

    输出

    加密后的字符串

    样例输入

    123456

    样例输出

    czgzz5i20Rw=

    我也不是很懂,先放在这,有时间再看看吧

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Security.Cryptography;
    using System.IO;
    
    namespace ConsoleApp1
    {
    
    
        class Program
        {
            //验证DES加密算法
            static void Main(string[] args)
            {
                string input = Console.ReadLine();
                Console.WriteLine(Class1.strEncryptDES(input, "@1234567"));
                Console.ReadKey();
            }
        }
    
        public class Class1
        {
            public static string strEncryptDES(string encryptString, string encryptKey)
            {
                try
                {
                    byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                    byte[] rgbIV = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
                    byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                    DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                    MemoryStream mStream = new MemoryStream();
                    CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);
                    cStream.Write(inputByteArray, 0, inputByteArray.Length);
                    cStream.FlushFinalBlock();
                    return Convert.ToBase64String(mStream.ToArray());
                }
                catch
                {
                    return encryptString;
                }
            }
    
        }
    
    
    }
    
    展开全文
  • 1 下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。23 首先,生成一个密钥KEY。4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。代码参考如下...

    1 下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。2

    3 首先,生成一个密钥KEY。4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。代码参考如下:5 packagecom.neusoft.jiami;6 importJava.io.File;7 importjava.io.FileOutputStream;8 importjava.security.SecureRandom;9 importjavax.crypto.KeyGenerator;10 importjavax.crypto.SecretKey;11 classKey {12 privateString keyName;13 publicKey(String keyName) {14 this.keyName =keyName;15 }16 public void createKey(String keyName) throwsException {17 //创建一个可信任的随机数源,DES算法需要

    18 SecureRandom sr = newSecureRandom();19 //用DES算法创建一个KeyGenerator对象

    20 KeyGenerator kg = KeyGenerator.getInstance("DES");21 //初始化此密钥生成器,使其具有确定的密钥长度

    22 kg.init(sr);23 //生成密匙

    24 SecretKey key =kg.generateKey();25 //获取密钥数据

    26 byte rawKeyData[] =key.getEncoded();27 //将获取到密钥数据保存到文件中,待解密时使用

    28 FileOutputStream fo = new FileOutputStream(newFile(keyName));29 fo.write(rawKeyData);30 }31 public static voidmain(String args[]) {32 try{33 new Key("key.txt");34 } catch(Exception e) {35 e.printStackTrace();36 }37 }38 }39 第二步,对我们所要进行加密的类文件进行加密。40 比如我有一个DigestPass类,已经被正常编译好生成DigestPass.class文件。此时,这个类文件是任何人都可以用的。因为系统的类加载器可以自动的加载它。那么下一步,我们要做的就是把这个类文件加密。使系统的类加载器无法读取到正确的字节码文件。参考代码如下:41 packagecom.neusoft.jiami;42 importjava.io.File;43 importjava.io.FileInputStream;44 importjava.io.FileOutputStream;45 importjava.security.SecureRandom;46 importjavax.crypto.Cipher;47 importjavax.crypto.SecretKey;48 importjavax.crypto.SecretKeyFactory;49 importjavax.crypto.spec.DESKeySpec;50 public classJiaMi {51 public static void main(String[] args) throwsException {52 //DES算法要求有一个可信任的随机数源

    53 SecureRandom sr = newSecureRandom();54 //获得密匙数据

    55 FileInputStream fi = new FileInputStream(new File("key.txt"));56 byte rawKeyData[] = new byte[fi.available()];57 fi.read(rawKeyData);58 fi.close();59 //从原始密匙数据创建DESKeySpec对象

    60 DESKeySpec dks = newDESKeySpec(rawKeyData);61 //创建一个密匙工厂,然后用它把DESKeySpec转换成一个SecretKey对象

    62 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);63 //Cipher对象实际完成加密操作

    64 Cipher cipher = Cipher.getInstance("DES");65 //用密匙初始化Cipher对象

    66 cipher.init(Cipher.ENCRYPT_MODE, key, sr);67 //现在,获取要加密的文件数据

    68 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));69 byte data[] = new byte[fi2.available()];70 fi2.read(data);71 fi2.close();72 //正式执行加密操作

    73 byte encryptedData[] =cipher.doFinal(data);74 //用加密后的数据覆盖原文件

    75 FileOutputStream fo = new FileOutputStream(new File("DigestPass.class"));76 fo.write(encryptedData);77 fo.close();78 }79 }80 第三步,用自定义的CLASSLOADER进行加载。参考代码如下:81 packagecom.neusoft.jiami;82 importjava.io.File;83 importjava.io.FileInputStream;84 importjava.io.FileOutputStream;85 importjava.security.SecureRandom;86 importjavax.crypto.Cipher;87 importjavax.crypto.SecretKey;88 importjavax.crypto.SecretKeyFactory;89 importjavax.crypto.spec.DESKeySpec;90 importcom.neusoft.classloader.MyClassLoader;91 public classJieMi {92 public static void main(String[] args) throwsException {93 //DES算法要求有一个可信任的随机数源

    94 SecureRandom sr = newSecureRandom();95 //获得密匙数据

    96 FileInputStream fi = new FileInputStream(new File("key.txt"));97 byte rawKeyData[] = new byte[fi.available()];//= new byte[5];

    98 fi.read(rawKeyData);99 fi.close();100 //从原始密匙数据创建一个DESKeySpec对象

    101 DESKeySpec dks = newDESKeySpec(rawKeyData);102 //创建一个密匙工厂,然后用它把DESKeySpec对象转换成一个SecretKey对象

    103 SecretKey key = SecretKeyFactory.getInstance("DES").generateSecret(dks);104 //Cipher对象实际完成解密操作

    105 Cipher cipher = Cipher.getInstance("DES");106 //用密匙初始化Cipher对象

    107 cipher.init(Cipher.DECRYPT_MODE, key, sr);108 //现在,获取数据并解密

    109 FileInputStream fi2 = new FileInputStream(new File("DigestPass.class"));110 byte encryptedData[] = new byte[fi2.available()];111 fi2.read(encryptedData);112 fi2.close();113 //正式执行解密操作

    114 byte decryptedData[] =cipher.doFinal(encryptedData);115 //这时把数据还原成原有的类文件116 //FileOutputStream fo = new FileOutputStream(new117 //File("DigestPass.class"));118 //fo.write(decryptedData);119 //用解密后的数据加载类并应用

    120 MyClassloader mcl = new MyClassloader("E:/");121 Class cl = mcl.loadClass(decryptedData, "com.neusoft.jiami.DigestPass");122 DigestPass dp =cl.newInstance();123 }124 }

    展开全文
  • DES 对称加密算法

    2017-03-20 18:17:23
    import java.security.SecureRandom; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKeyFactory; import javax.crypto.SecretKey;...import javax.crypto.Cipher;...DES是一种对称
    import java.security.SecureRandom;
    import javax.crypto.spec.DESKeySpec;
    import javax.crypto.SecretKeyFactory;
    import javax.crypto.SecretKey;
    import javax.crypto.Cipher;


    /**
    DES加密介绍
    DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究,
    后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
    24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现

    注意:DES加密和解密过程中,密钥长度都必须是8的倍数
    */
    public class DES {
    public DES() {
    }
    //测试
    public static void main(String args[]) {
    //待加密内容
    String str = "实体类";
    //密码,长度要是8的倍数
    String password = "9588028820109132570743325311898426347857298773549468758875018579537757772163084478873699447306034466200616411960574122434059469100235892702736860872901247123456";


    byte[] result = DES.encrypt(str.getBytes(),password);
    System.out.println("加密后:"+new String(result));


    //直接将如上内容解密
    try {
    byte[] decryResult = DES.decrypt(result, password);
    System.out.println("解密后:"+new String(decryResult));
    } catch (Exception e1) {
    e1.printStackTrace();
    }


    }


    /**
    * 加密
    * @param datasource byte[]
    * @param password String
    * @return byte[]
    */
    public static byte[] encrypt(byte[] datasource, String password) { 
    try{
    SecureRandom random = new SecureRandom();
    DESKeySpec desKey = new DESKeySpec(password.getBytes());
    //创建一个密匙工厂,然后用它把DESKeySpec转换成
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    SecretKey securekey = keyFactory.generateSecret(desKey);
    //Cipher对象实际完成加密操作
    Cipher cipher = Cipher.getInstance("DES");
    //用密匙初始化Cipher对象
    cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
    //现在,获取数据并加密
    //正式执行加密操作
    return cipher.doFinal(datasource);
    }catch(Throwable e){
    e.printStackTrace();
    }
    return null;
    }
    /**
    * 解密
    * @param src byte[]
    * @param password String
    * @return byte[]
    * @throws Exception
    */
    public static byte[] decrypt(byte[] src, String password) throws Exception {
    // DES算法要求有一个可信任的随机数源
    SecureRandom random = new SecureRandom();
    // 创建一个DESKeySpec对象
    DESKeySpec desKey = new DESKeySpec(password.getBytes());
    // 创建一个密匙工厂
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    // 将DESKeySpec对象转换成SecretKey对象
    SecretKey securekey = keyFactory.generateSecret(desKey);
    // Cipher对象实际完成解密操作
    Cipher cipher = Cipher.getInstance("DES");
    // 用密匙初始化Cipher对象
    cipher.init(Cipher.DECRYPT_MODE, securekey, random);
    // 真正开始解密操作
    return cipher.doFinal(src);
    }
    }
    展开全文
  • 主要介绍了java基于Des对称加密算法实现的加密与解密功能,结合实例形式详细分析了Des加密算法的功能、原理、使用方法与相关注意事项,需要的朋友可以参考下
  • 加密算法–DES对称加密算法详解 DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中...

    加密算法–DES对称加密算法详解

    一、什么是DES算法?
    二.、DES算法是怎么加密的?
    三、加密具体过程?

      一 、下面来回答第一个问题:什么是DES算法?
      DES(Data Encryption Standard,即数据加密标准),是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。
       二、接下来回答第二个问题:DES算法是怎么加密的?
      DES是将明文按64位进行分组,密钥长64位,密钥是利用56+8奇偶校验位(第8,16,24,32,40,48,56,64)=64位的密钥对以64位为单位的块数据进行加解密。参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。
      DES算法的加密密钥是根据用户输入的密码生成的,该算法把64位密码中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,在计算密钥时要忽略这8位.如果输入的密码只是在这8位上有区别的话,那么操作后的结果将是一样的.des-1
      DES是一种对称密码,加密过程和解密过程使用相同的密钥。DES是一种迭代算法。DES对明文中的每个分组的加密都包含16轮,且每轮的操作完全相同。每轮都会使用不同的子密钥,并且子密钥Ki都从主密钥推导而来。
    迭代过程
      三、第三个问题: 加密具体过程?
       DES算法的步骤,包括IP置换、密钥置换、E扩展置换、S盒代替、P盒置换和逆初始置换IP-1
    加密过程
       3.1、IP置换与逆初始置换IP-1
      3.1.1、IP置换
      IP置换:根据置换表哥将输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。
    IP置换表格
    说明:(1)表格从左到右,从上到下地阅读。数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第58位放到新数据的第1位,第50位放到第2位,……依此类推,第7位放到第64位。
    (2)置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0为新数据的右32位。
    (3)位数是从左边开始数的,即最0x0000 0080 0000 0002最左边的位为1,最右边的位为64。
    3.1.2、逆初始置换IP-1
      逆初始置换IP-1:初始置换的逆过程,DES最后一轮后,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为末置换的输入。
    IP-1逆初始置换
      3.2、密钥置换
     e (1)每个字节的第8位是奇偶校验位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由下表生成(注意表中没有8,16,24,32,40,48,56和64这8位):
    密钥置换-1
      (2)在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下:
      1).将56位的密钥分成两部分,每部分28位。
      2).根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数如下表:
    密钥置换-2
      (3)移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则如下表(注意表中没有9,18,22,25,35,38,43和54这8位):
    密钥置换-3
      3.3、扩展置换E
      扩展置置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分为4位×8组)输出。
      扩展置换目的有两个:生成与密钥相同长度的数据以进行异或运算;提供更长的结果,在后续的替代运算中可以进行压缩。
    扩展置换-1
      表中的数字代表位,两列黄色数据是扩展的数据,可以看出,扩展的数据是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位。
      3.4、S盒变换
      压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。
    s盒变换-1
      一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H,中间四位做为列数L,在S-BOX中查找第H行L列对应的数据(<32)。
      8个S盒如下:
      S盒1
      s盒1

    S盒2S盒2
    S盒3
    S盒3
    S盒4
    S盒4
    S盒5
    S盒5
    S盒6
    S盒6
    S盒7
    S盒7
    S盒8
    S盒8
    (1)注意,S盒的行列计数都是从0开始。
    (2)代替过程产生8个4位的分组,组合在一起形成32位数据。
    (3)S盒代替时DES算法的关键步骤,所有的其他的运算都是线性的,易于分析,而S盒是非线性的:S(a)⊕S(b)≠S(a⊕b),相比于其他步骤,提供了更好安全性。
    (4)每一个S-盒都有6个输入位和4个输出位。
    (5)任意一个输出位都不应该太接近于输出位的线性组合。
    (6)如果输入位的最高位和最低位是固定的,只有中间的4个是可变的,则每个可能的4位输出值都必须只出现一次。
    (7)对于S-盒的两个输出,如果仅有1位不同,则输出至少有两位不同。
    (8)对于S-盒的两个输出,如果中间的2位不同,则输出必须至少2位不同。
    (9)对于S-盒的两个输出,如果开头2位不同,但最后2位相同,则输出必须不同。
    (10)对于S任意有6位非零差分的输入对,32位输入中至多有8对有相同的输出差分
    (11)8个S-盒对应的32位输出的冲突(零输出差异)只有在3个相邻的S-盒的情况下才有可能。
      3.5、P盒变换
      S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则如下表:
    P盒变换-1   最后,P盒置换的结果与最初的64位分组左半部分L0异或,然后左、右半部分交换,接着开始另一轮。

    展开全文
  • DES对称加密算法,对称加密算法就是能将数据加解密。加密的时候使用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密.
  • 1、Des symmetric encryptionData Encryption Standard is a symmetric-key algorithm for the encrypting the data. It comes under block cipher algorithm which follows Feistel structure. Here is the block ...
  • 参考相关文献,设计一个DES对称加密算法。并编写一个控制台应用予以验证。密钥设定为:@1234567。 class Program{ //验证DES加密算法 static void Main(string[] args){ Console.WriteLine(Class1.ECP("absg123@...
  • AES/DES 对称加密算法

    2018-12-25 14:04:55
    DES、AES对称加密算法,之前从网上找的,但是在MAC上运行发现每次加密出来的结果都不一样,后来查了一些博客,最后确认是SecureRandom的随机算法问题,需要设置setSeed.
  • DES对称加密算法简析

    2017-11-25 13:33:00
     在了解DES算法前,先加单介绍一下对称加密算法,因为DES属于对称加密算法的一种。  对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过...
  • 1 下面用DES对称加密算法(设定一个密钥,然后对所有的数据进行加密)来简单举个例子。 2 3 首先,生成一个密钥KEY。 4 我把它保存到key.txt中。这个文件就象是一把钥匙。谁拥有它,谁就能解开我们的类文件。...
  • 参考相关文献,设计一个DES对称加密算法。并编写一个控制台应用予以验证。密钥设定为:@1234567。 class Program{ //验证DES加密算法 static void Main(string[] args){ Console.WriteLine(Class1.ECP("absg123@...
  • DES算法为密码体制中的对称密码体制,是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。 这里以Java代码实现DES算法。
  • DES对称加密算法的简单实现网上看到的都是用了第三方包的,我这里写了个纯java无依赖的环境代码 网上看到的都是用了第三方包的,我这里写了个纯java无依赖的 环境 JDK11 Windows7 VS Code 代码 源代码都发布在...
  • 复旦大学16级密码学基础 实验二 DES对称加密算法 1) 了解DES的加解密原理。2) 能够使用DES算法对数据进行加密和解密处理。 资源包括:源码、实验报告详细版、实验指导书、DES替换置换表
  • 本文实例讲述了java基于Des对称加密算法实现的加密与解密功能。分享给大家供大家参考,具体如下:Des 加密相关类介绍:SecureRandom 这个类是继承自java.util.Random 这个类SecureRandom 这个类的构造器有三种,下面...
  • DES对称加密算法介绍

    2020-03-13 18:36:39
    DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块...需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。 D...
  • 采用DES对称加密算法,使用字符串“hnzt”生成加密的密钥 则组合的字符串为:851-2110599902&ZIQI&SONG&HKG&CN&1503560275539&24 加密后为: af5a8b0e4680161606b7a72de89295733e05f8e4aec1866056f2850df1e2578bc6...
  • 最近刚接触密码学,这是我仔细研究DES对称密码总结...甘八烈! DES对称加密算法举例详解 DES加解密介绍: 1.如果我们手上有一段明文:8787878787878787 2.选取DES密钥:0E329232EA6D0D73 3.我们就能得到密文:000000000...
  • 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yao)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文...
  • DES对称加密算法详解和c++代码实现(带样例和详细的中间数据) 特点: 1.DES是对称性加密算法,即加密和解密是对称的,用的是同一个密钥 2.DES只处理二进制数据,所以需要将明文转换成为2进制数据...
  • Java实现DES对称加密算法(附Android下3DES的JNI源码)

    千次阅读 热门讨论 2013-09-13 18:47:25
    Java实现DES对称加密算法  Sun公司在Java Platform Standard Ed.6中引入了javax.crypto软件包,javax.crypto软件包为加密操作提供类和接口。在此包中定义的加密操作包括加密、密钥生成和密钥协商,以及消息验证码...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,163
精华内容 1,665
关键字:

des对称加密算法