`
shazhifeng
  • 浏览: 125156 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

DES加密标准的说明以及加密/解密函数的实现源代码

阅读更多

面是来自维基的关于DES的说明: 数据加密标准( DES )是一种加密演算法(一种加密信息的方法), 1976年被美国联邦政府的联邦信息处理标准(FIPS)所选中,随后既在国际上广泛流传开来。这个演算法因为包含一些机密设计元素,相关的短密钥长度以及被怀疑内含国家安全局(NSA)的后门而在开始是有争议的,DES因此收到强烈的学院派式的审查,并以此推动了现代的分组密码及其密码分析。这个演算法因为包含一些机密设计元素,相关的短密钥长度以及被怀疑内含国家安全局(NSA)的后门而在开始是有争议的,DES因此收到强烈的学院派式的审查,并以此推动了现代的分组密码及其密码分析。

DES现在已经不被视为一种安全的加密演算法,因为它使用的56位秘钥过短,以现代计算能力,24小时内极可能被破解。 也有一些分析报告提出了该演算法的理论上的弱点,虽然实际情况未必出现。该标准在最近已经被高级加密标准(AES)所取代。

虽然是一种被取代了的算法,不过通过理解和研究这种算法的实现,还是可以带给我们不少启示的。下面是实现的C#代码:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.IO;
using System.Security.Cryptography; 

private void menuItem13_Click(
    object sender,
    System.EventArgs e)
{
    //对应加密函数DSACrypData(string  strcrypto)
    string strcrypto=richTextBox1.Text;
    DSACrypData(strcrypto);
}

public static void DSACrypData(string  strcrypto)
{
    //先要将字符串转换为字节数组,这与编码有关。
    string str = "this is a test.";
    byte[] bytes = Encoding.ASCII.GetBytes(str);
    //选择签名方式,有RSA和DSA
    DSACryptoServiceProvider dsac =
             new DSACryptoServiceProvider();
    byte[] sign = dsac.SignData(bytes);
    //sign便是出来的签名结果。

    //下面是认证了
    DSACryptoServiceProvider dsac2 =
          new DSACryptoServiceProvider();
    dsac2.FromXmlString(dsac.ToXmlString(false));
    bool ver = dsac2.VerifyData(bytes, sign);
    if (ver)
    {
        MessageBox.Show("通过");
    }
    else
    {
        MessageBox.Show("不能通过");
    }
}

private void menuItem17_Click(
    object sender,
     System.EventArgs e)
{
    //对应加密函数DSACrypData(string  strcrypto)
    string strData=richTextBox1.Text;
    richTextBox2.Text=DESEncodeData(strData);
}
public static string DESEncodeData(string data)
{
    string KEY_64 = "VavicApp";
    string IV_64 = "VavicApp";
    byte[] byKey =
         System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
    byte[] byIV =
         System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

    DESCryptoServiceProvider cryptoProvider =
                            new DESCryptoServiceProvider();
    int i = cryptoProvider.KeySize;
    MemoryStream ms = new MemoryStream();
    CryptoStream cst =
        new CryptoStream(ms,
        cryptoProvider.CreateEncryptor(byKey,byIV),
        CryptoStreamMode.Write);

    StreamWriter sw = new StreamWriter(cst);
    sw.Write(data);
    sw.Flush();
    cst.FlushFinalBlock();
    sw.Flush();
    return Convert.ToBase64String(
        ms.GetBuffer(),0,(int)ms.Length);
} 

private void menuItem21_Click(
    object sender,
     System.EventArgs e)
{
    //对应加密函数DSACrypData(string  strcrypto)
    string strData=richTextBox1.Text;
    richTextBox2.Text=DESDecodeData(strData);
}

public static string DESDecodeData(string data)
{
    string KEY_64 = "VavicApp";
    string IV_64 = "VavicApp";
    byte[] byKey =
        System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
    byte[] byIV =
        System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

    byte[] byEnc;
    try
    {
        byEnc = Convert.FromBase64String(data);
    }
    catch
    {
        return null;
    }

    DESCryptoServiceProvider cryptoProvider =
        new DESCryptoServiceProvider();
    MemoryStream ms = new MemoryStream(byEnc);
    CryptoStream cst =
        new CryptoStream(ms,
        cryptoProvider.CreateDecryptor(byKey,byIV),
        CryptoStreamMode.Read);
    StreamReader sr = new StreamReader(cst);
    return sr.ReadToEnd();
} 

 

分享到:
评论

相关推荐

    C++ 代码实现DES加密解密源代码类

    在C++中实现DES加密解密,可以创建一个类来封装相关的操作,这样有利于代码的复用和维护。 描述中提到的"单倍双倍加密算法的实现",可能是指使用DES算法进行一次或两次加密的过程。单次DES加密使用同一个密钥对数据...

    DES加密解密算法 C语言源代码

    这篇C语言源代码实现了DES加密解密算法,特别适合于资源有限的环境,如STM32或51单片机。STM32系列是基于ARM Cortex-M内核的微控制器,而51单片机则是早期广泛应用的8位微处理器。在这些平台上,由于内存(RAM)资源...

    DES加密解密VB6.0源代码

    总结来说,VB6.0中实现DES加密解密涉及理解DES算法原理,利用`DESCryptoServiceProvider`类进行加密解密操作,并通过文件操作函数存储和读取加密数据。虽然DES已经过时,但在某些场景下,它仍然可以作为一个学习和...

    DES加解密算法源代码,java

    在这个“DES加解密算法源代码,java”项目中,开发者通过自定义的Java代码实现了DES算法,而非直接使用Java的javax.crypto包中的预封装类。这种实现方式有助于深入理解DES的工作机制,包括初始置换、轮函数、逆初始...

    DES加密解密源代码

    1. **DES算法流程**:源代码会清晰地展示DES加密的完整流程,包括初始置换IP、密钥扩展、轮函数F以及逆初始置换等步骤。这有助于理解DES的工作原理。 2. **64位数据块和56位密钥**:DES处理的是64位的数据块,但...

    cryptopp的des加密解密

    通过上述步骤,你可以使用Cryptopp库在VC6下实现DES加密解密。虽然DES现在被认为安全性较低,已被更强大的算法如AES取代,但它仍然是理解和学习对称加密的一个基础。对于初学者,这个例子有助于掌握加密库的使用和...

    DES加密解密实现

    学习和理解DES加密解密的实现,有助于深入理解密码学的基本原理,包括对称加密的运作方式,以及非线性和线性变换在加密算法中的应用。不过,需要注意的是,DES现在已经被视为较弱的加密标准,因为它只有56位的有效...

    java和javascript之间的DES加密解密

    压缩包中的文件可能包含了Java源代码和JavaScript源代码示例,以及可能的测试数据。这些文件可以直接运行,用于演示如何在Java和JavaScript之间进行DES加密解密。通过查看和理解这些代码,你可以更好地了解如何在...

    Delphi10.2 DES/CBC/PKCS5Padding/UTF-8

    这些文件可能包含了实现上述功能的关键代码,如设置密钥、初始化向量(IV)、加密和解密函数,以及处理UTF-8编码的方法。 在实际开发中,这种加密组件可能被用于保护敏感数据,如用户密码、个人信息等。它在跨平台...

    51单片机上的DES加密算法代码

    对系统资源消耗极低的DES加密算法代码,在普通51单片机上即可实现,仅需4K大小的flash存储,1K大小的ram。操作仅需两个函数,一个加密函数,一个解密函数,使用非常方便。

    DES加密算法源代码下载

    1. **des.c**:这是DES加密算法的核心实现文件,通常包含了一系列的函数,用于执行DES的加密和解密过程。这些函数可能包括`DES_set_key`(设置密钥)、`DES_ecb_encrypt`(电子密码本模式下的加密/解密)以及`DES_...

    visual c++ VC实现3DES加解密 加密解密.zip

    总之,Visual C++实现3DES加解密需要理解3DES算法原理,导入相应的加密库,设置密钥和加密模式,编写加解密函数,进行测试并处理文件操作。这个项目提供的源代码和资源文件可以帮助开发者深入理解并实践3DES在C++...

    DES加密解密C/C++接口

    压缩包中的"DES"文件可能是实现这些功能的源代码文件,包含了上述的接口和实现细节。通过阅读和理解这个文件,你可以深入学习DES加密算法的实现原理,并且可以将其应用于自己的项目中,如数据保护、通信加密等场景。

    DES 加密解密程序及源代码 C#版

    9. **源代码分析**:压缩包中的"Des"文件可能包含了一个完整的C#项目或单独的源代码文件,用于演示如何在C#中实现DES加密解密。通过阅读和理解这些源代码,你可以深入理解DES的工作原理以及如何在实际应用中使用它。...

    Qt写的DES加密算法展示程序

    由于压缩包中只有一个名为"DES"的文件,我们可以假设这是源代码文件,包含了实现DES加密算法的C++代码。可能的结构包括主函数、DES类定义、密钥处理函数、加密和解密的实现等。通过查看和分析这个文件,可以更深入地...

    Delphi DES加密算法(带源代码)

    这个文件通常会包括一个或多个自定义的DES加密和解密函数。通过阅读源代码,你可以看到如何在Delphi中手动实现DES算法的各个步骤,例如: - 密钥扩展:将56位密钥扩展为64位,并进行PC-1置换。 - 子密钥生成:使用...

    3DES加密算法C语言实现

    - `3des.c`:C语言实现的3DES加密算法源代码。 - `3des.h`:头文件,包含函数声明和必要的宏定义。 - `jni_interface.c`:JNI接口文件,用于Android平台的调用。 - `Android.mk` 或 `CMakeLists.txt`:构建文件,...

Global site tag (gtag.js) - Google Analytics