• 3DES


    3DES

     编辑

    本词条缺少名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

    3DES(或称为Triple DES)是三重数据加密算法TDEATriple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法

    中文名

    3DES

    外文名

    Triple DES

    发明者

    美国

    发明时间

    1981

    目录

    1. 算法介绍
    2. 历史发展
    3. 加密过程
    4. 3DES算法
    5. 加密标准
    6. 加密实例
    7. ▪ Java语言
    8. ▪ PHP语言

    算法介绍

    编辑

    3DES又称Triple DES,是DES加密算法的一种模式,它使用356位的密钥

    3DES

    数据进行三次加密。数据加密标准DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES3DES更为安全。

    3DES(即Triple DES)是DESAES过渡的加密算法1999年,NIST3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥M代表明文,C代表密文,这样:

    3DES加密过程为:C=Ek3(Dk2(Ek1(M)))

    3DES解密过程为:M=Dk1(EK2(Dk3(C)))

    历史发展

    编辑

    3DES(即Triple DES)是DESAES过渡的加密算法,它使用356位的密钥对数据进行三次加密。是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。比起最初的DES3DES更为安全。

    加密过程

    编辑

    3DES加密过程为:C=Ek3(Dk2(Ek1(P)))

    3DES解密过程为:P=Dk1(EK2(Dk3(C)))

    具体的加/解密过程如图所示。

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    using System;

    using System.Text;

    using System. IO;

    using System.Security.Cryptography;

    class Class1

    {

    static void Main()

    {

    Console.WriteLine("Encrypt String...");

    txtKey = "tkGGRmBErvc=";

    btnKeyGen();

    Console.WriteLine("Encrypt Key :{0}",txtKey);

    txtIV = "Kl7ZgtM1dvQ=";

    btnIVGen();

    Console.WriteLine("Encrypt IV :{0}",txtIV);

    Console.WriteLine();

    string txtEncrypted = EncryptString("1111");

    Console.WriteLine("Encrypt String : {0}",txtEncrypted);

    string txtOriginal = DecryptString(txtEncrypted);

    Console.WriteLine("Decrypt String : {0}",txtOriginal);

    }

    private static SymmetricAlgorithm mCSP;

    private static string txtKey;

    private static string txtIV;

    private static void btnKeyGen()

    {

    mCSP = SetEnc();

    byte[] byt2 = Convert.FromBase64String(txtKey);

    mCSP.Key = byt2;

    }

    private static void btnIVGen()

    {

    byte[] byt2 = Convert.FromBase64String(txtIV);

    mCSP.IV = byt2;

    }

    private static string EncryptString(string Value)

    {

    ICryptoTransform ct;

    MemoryStream ms;

    CryptoStream cs;

    byte[] byt;

    ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);

    byt = Encoding.UTF8.GetBytes(Value);

    ms = new MemoryStream();

    cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

    cs.Write(byt, 0, byt.Length);

    cs.FlushFinalBlock();

    cs.Close();

    return Convert.ToBase64String(ms.ToArray());

    }

    private static string DecryptString(string Value)

    {

    ICryptoTransform ct;

    MemoryStream ms;

    CryptoStream cs;

    byte[] byt;

    ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);

    byt = Convert.FromBase64String(Value);

    ms = new MemoryStream();

    cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);

    cs.Write(byt, 0, byt.Length);

    cs.FlushFinalBlock();

    cs.Close();

    return Encoding.UTF8.GetString(ms.ToArray());

    }

    private static SymmetricAlgorithm SetEnc()

    {

    return new DESCryptoServiceProvider();

    }

    }

    K1K2K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击时是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。

    3DES算法

    编辑

    3DES算法是指使用双长度(16字节)密钥K=KL||KR)将8字节明文数据块进行3DES加密/解密。如下所示:

    Y = DES( KL[DES-1( KR[DES( KL[X] )] )] )

    解密方式为:

    X = DES-1( KL[DES( KR[DES-1( KL[Y] )] )] )

    其中,DES( KL[X] )表示用密钥K对数据X进行DES加密,DES-1( KR[Y] )表示用密钥K对数据Y进行解密。

    SessionKey的计算采用3DES算法,计算出单倍长度的密钥。表示法为:SK = Session(DKDATA)

    3DES加密算法为:

    VOID 3DES(BYTE DoubleKeyStr[16]BYTE Data[8]BYTE Out[8])

    {

    BYTE Buf1[8]Buf2[8];

    DES (&DoubleKeyStr[0]DataBuf1);

    UDES(&DoubleKeyStr[8]Buf1Buf2);

    DES (&DoubleKeyStr[0]Buf2Out);

  • 相关阅读:
    马哥学习笔记三——DNS服务
    rndc
    DNS服务器解析错误:server can't find 168.220.168.192.in-addr.arpa: SERVFAIL
    python学习笔记十一——类和对象
    启动或重启DNS服务时,卡在Generating /etc/rndc.key:上
    python学习笔记十——异常处理
    python学习笔记九——文件与目录
    马哥学习笔记一——ssh服务
    python学习笔记八——正则表达式
    python学习笔记七——模块和包
  • 原文地址:https://www.cnblogs.com/deepalley/p/12549144.html
Copyright © 2020-2023  润新知