DES、3DES加密算法

DES、3DES加密算法

DES加密算法,为对称加密算法中的一种。70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:Data Encryption Standard。对称加密算法,是相对于非对称加密算法而言的。两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。常见的DES、3DES、AES均为对称加密算法,而RSA、椭圆曲线加密算法,均为非对称加密算法。

  DES是以64比特的明文为一个单位来进行加密的,超过64比特的数据,要求按固定的64比特的大小分组,分组有很多模式,后续单独总结,暂时先介绍DES加密算法。DES使用的密钥长度为64比特,但由于每隔7个比特设置一个奇偶校验位,因此其密钥长度实际为56比特。奇偶校验为最简单的错误检测码,即根据一组二进制代码中1的个数是奇数或偶数来检测错误。

Feistel网络

DES的基本结构,由IBM公司的Horst Feistel设计,因此称Feistel网络。在Feistel网络中,加密的每个步骤称为轮,经过初始置换后的64位明文,进行了16轮Feistel轮的加密过程,最后经过终结置换后形成最终的64位密文。如下为Feistel网络的示意图:

image

64位明文被分为左、右两部分处理,右侧数据和子密钥经过轮函数f生成用于加密左侧数据的比特序列,与左侧数据异或运算,运算结果输出为加密后的左侧,右侧数据则直接输出为右侧。
  其中子密钥为本轮加密使用的密钥,每次Feistel均使用不同的子密钥。子密钥的计算,以及轮函数的细节,稍后下文介绍。由于一次Feistel轮并不会加密右侧,因此需要将上一轮输出后的左右两侧对调后,重复Feistel轮的过程,DES算法共计进行16次Feistel轮,最后一轮输出后左右两侧无需对调。

DES加密和解密的过程一致,均使用Feistel网络实现,区别仅在于解密时,密文作为输入,并逆序使用子密钥。
go标准库中DES算法实现如下:

func cryptBlock(subkeys []uint64, dst, src []byte, decrypt bool) {
    b := binary.BigEndian.Uint64(src)
    //初始置换
    b = permuteInitialBlock(b)
    left, right := uint32(b>>32), uint32(b)

    left = (left << 1) | (left >> 31)
    right = (right << 1) | (right >> 31)

    //共计16次feistel轮
    if decrypt {
        for i := 0; i < 8; i++ {
            left, right = feistel(left, right, subkeys[15-2*i], subkeys[15-(2*i+1)])
        }
    } else {
        for i := 0; i < 8; i++ {
            left, right = feistel(left, right, subkeys[2*i], subkeys[2*i+1])
        }
    }

    left = (left << 31) | (left >> 1)
    right = (right << 31) | (right >> 1)

    // 左右切换并执行最终置换
    preOutput := (uint64(right) << 32) | uint64(left)
    binary.BigEndian.PutUint64(dst, permuteFinalBlock(preOutput))
}
   
   
   
   
  • 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

DES算法共计进行16次Feistel轮,上面却只有循环了8次
这是由于 feistel 方法中一次操作了左右两个参数,所以循环次数减半

func feistel(l, r uint32, k0, k1 uint64) (lout, rout uint32) {
    var t uint32

    t = r ^ uint32(k0>>32)
    l ^= feistelBox[7][t&0x3f] ^
        feistelBox[5][(t>>8)&0x3f] ^
        feistelBox[3][(t>>16)&0x3f] ^
        feistelBox[1][(t>>24)&0x3f]

    t = ((r << 28) | (r >> 4)) ^ uint32(k0)
    l ^= feistelBox[6][(t)&0x3f] ^
        feistelBox[4][(t>>8)&0x3f] ^
        feistelBox[2][(t>>16)&0x3f] ^
        feistelBox[0][(t>>24)&0x3f]

    t = l ^ uint32(k1>>32)
    r ^= feistelBox[7][t&0x3f] ^
        feistelBox[5][(t>>8)&0x3f] ^
        feistelBox[3][(t>>16)&0x3f] ^
        feistelBox[1][(t>>24)&0x3f]

    t = ((l << 28) | (l >> 4)) ^ uint32(k1)
    r ^= feistelBox[6][(t)&0x3f] ^
        feistelBox[4][(t>>8)&0x3f] ^
        feistelBox[2][(t>>16)&0x3f] ^
        feistelBox[0][(t>>24)&0x3f]

    return l, r
}
   
   
   
   
  • 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

初始置换和终结置换

进入Feistel轮之前,64位明文需做一次初始置换。Feistel轮结束后,需做一次反向操作,即终结置换。

go标准库中使用的初始置换表和终结置换表如下:

// 初始置换表
var initialPermutation = [64]byte{
    6, 14, 22, 30, 38, 46, 54, 62,
    4, 12, 20, 28, 36, 44, 52, 60,
    2, 10, 18, 26, 34, 42, 50, 58,
    0, 8, 16, 24, 32, 40, 48, 56,
    7, 15, 23, 31, 39, 47, 55, 63,
    5, 13, 21, 29, 37, 45, 53, 61,
    3, 11, 19, 27, 35, 43, 51, 59,
    1, 9, 17, 25, 33, 41, 49, 57,
}

// 终结置换表
var finalPermutation = [64]byte{
    24, 56, 16, 48, 8, 40, 0, 32,
    25, 57, 17, 49, 9, 41, 1, 33,
    26, 58, 18, 50, 10, 42, 2, 34,
    27, 59, 19, 51, 11, 43, 3, 35,
    28, 60, 20, 52, 12, 44, 4, 36,
    29, 61, 21, 53, 13, 45, 5, 37,
    30, 62, 22, 54, 14, 46, 6, 38,
    31, 63, 23, 55, 15, 47, 7, 39,
}
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

子密钥的计算

DES初始密钥为64位,其中8位用于奇偶校验,实际密钥为56位,64位初始密钥经过PC-1密钥置换后,生成56位串。经PC-1置换后56位的串,分为左右两部分,各28位,分别左移1位,形成C0和D0,C0和D0合并成56位,经PC-2置换后生成48位子密钥K0。C0和D0分别左移1位,形成C1和D1,C1和D1合并成56位,经PC-2置换后生成子密钥K1。以此类推,直至生成子密钥K15。但注意每轮循环左移的位数,有如下规定:

var ksRotations = [16]uint8{1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}
   
   
   
   
  • 1

image

DES子密钥计算的代码如下:

// creates 16 56-bit subkeys from the original key
func (c *desCipher) generateSubkeys(keyBytes []byte) {
    // PC-1密钥置换,生成56位串
    key := binary.BigEndian.Uint64(keyBytes)
    permutedKey := permuteBlock(key, permutedChoice1[:])

    // 56位串分左右两部分,各28位
    leftRotations := ksRotate(uint32(permutedKey >> 28))
    rightRotations := ksRotate(uint32(permutedKey<<4) >> 4)

    // 生成子密钥
    for i := 0; i < 16; i++ {
        //合并左右两部分,之后PC-2置换
        pc2Input := uint64(leftRotations[i])<<28 | uint64(rightRotations[i])
        c.subkeys[i] = unpack(permuteBlock(pc2Input, permutedChoice2[:]))
    }
}
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3DES

DES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。为解决此问题,出现了3DES,也称Triple DES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使用 加密->加密->加密 的方式,而是采用了加密->解密->加密 的方式。

image

当三重密钥均相同时,前两步相互抵消,相当于仅实现了一次加密,因此可实现对普通DES加密算法的兼容。

image

解密

3DES解密过程,与加密过程相反,即逆序使用密钥。是以密钥3、密钥2、密钥1的顺序执行 解密->加密->解密

image

相比DES,3DES因密钥长度变长,安全性有所提高,但其处理速度不高。因此又出现了AES加密算法,AES较于3DES速度更快、安全性更高。

006 DES、3DES加密算法

DES加密算法,为对称加密算法中的一种。70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:Data Encryption Standard。对称加密算法,是相对于非对称加密算法而言的。两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。常见的DES、3DES、AES均为对称加密算法,而RSA、椭圆曲线加密算法,均为非对称加密算法。

  DES是以64比特的明文为一个单位来进行加密的,超过64比特的数据,要求按固定的64比特的大小分组,分组有很多模式,后续单独总结,暂时先介绍DES加密算法。DES使用的密钥长度为64比特,但由于每隔7个比特设置一个奇偶校验位,因此其密钥长度实际为56比特。奇偶校验为最简单的错误检测码,即根据一组二进制代码中1的个数是奇数或偶数来检测错误。

Feistel网络

DES的基本结构,由IBM公司的Horst Feistel设计,因此称Feistel网络。在Feistel网络中,加密的每个步骤称为轮,经过初始置换后的64位明文,进行了16轮Feistel轮的加密过程,最后经过终结置换后形成最终的64位密文。如下为Feistel网络的示意图:

image

64位明文被分为左、右两部分处理,右侧数据和子密钥经过轮函数f生成用于加密左侧数据的比特序列,与左侧数据异或运算,运算结果输出为加密后的左侧,右侧数据则直接输出为右侧。
  其中子密钥为本轮加密使用的密钥,每次Feistel均使用不同的子密钥。子密钥的计算,以及轮函数的细节,稍后下文介绍。由于一次Feistel轮并不会加密右侧,因此需要将上一轮输出后的左右两侧对调后,重复Feistel轮的过程,DES算法共计进行16次Feistel轮,最后一轮输出后左右两侧无需对调。

DES加密和解密的过程一致,均使用Feistel网络实现,区别仅在于解密时,密文作为输入,并逆序使用子密钥。
go标准库中DES算法实现如下:

func cryptBlock(subkeys []uint64, dst, src []byte, decrypt bool) {
    b := binary.BigEndian.Uint64(src)
    //初始置换
    b = permuteInitialBlock(b)
    left, right := uint32(b>>32), uint32(b)

    left = (left << 1) | (left >> 31)
    right = (right << 1) | (right >> 31)

    //共计16次feistel轮
    if decrypt {
        for i := 0; i < 8; i++ {
            left, right = feistel(left, right, subkeys[15-2*i], subkeys[15-(2*i+1)])
        }
    } else {
        for i := 0; i < 8; i++ {
            left, right = feistel(left, right, subkeys[2*i], subkeys[2*i+1])
        }
    }

    left = (left << 31) | (left >> 1)
    right = (right << 31) | (right >> 1)

    // 左右切换并执行最终置换
    preOutput := (uint64(right) << 32) | uint64(left)
    binary.BigEndian.PutUint64(dst, permuteFinalBlock(preOutput))
}
   
   
   
   
  • 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

DES算法共计进行16次Feistel轮,上面却只有循环了8次
这是由于 feistel 方法中一次操作了左右两个参数,所以循环次数减半

func feistel(l, r uint32, k0, k1 uint64) (lout, rout uint32) {
    var t uint32

    t = r ^ uint32(k0>>32)
    l ^= feistelBox[7][t&0x3f] ^
        feistelBox[5][(t>>8)&0x3f] ^
        feistelBox[3][(t>>16)&0x3f] ^
        feistelBox[1][(t>>24)&0x3f]

    t = ((r << 28) | (r >> 4)) ^ uint32(k0)
    l ^= feistelBox[6][(t)&0x3f] ^
        feistelBox[4][(t>>8)&0x3f] ^
        feistelBox[2][(t>>16)&0x3f] ^
        feistelBox[0][(t>>24)&0x3f]

    t = l ^ uint32(k1>>32)
    r ^= feistelBox[7][t&0x3f] ^
        feistelBox[5][(t>>8)&0x3f] ^
        feistelBox[3][(t>>16)&0x3f] ^
        feistelBox[1][(t>>24)&0x3f]

    t = ((l << 28) | (l >> 4)) ^ uint32(k1)
    r ^= feistelBox[6][(t)&0x3f] ^
        feistelBox[4][(t>>8)&0x3f] ^
        feistelBox[2][(t>>16)&0x3f] ^
        feistelBox[0][(t>>24)&0x3f]

    return l, r
}
   
   
   
   
  • 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

初始置换和终结置换

进入Feistel轮之前,64位明文需做一次初始置换。Feistel轮结束后,需做一次反向操作,即终结置换。

go标准库中使用的初始置换表和终结置换表如下:

// 初始置换表
var initialPermutation = [64]byte{
    6, 14, 22, 30, 38, 46, 54, 62,
    4, 12, 20, 28, 36, 44, 52, 60,
    2, 10, 18, 26, 34, 42, 50, 58,
    0, 8, 16, 24, 32, 40, 48, 56,
    7, 15, 23, 31, 39, 47, 55, 63,
    5, 13, 21, 29, 37, 45, 53, 61,
    3, 11, 19, 27, 35, 43, 51, 59,
    1, 9, 17, 25, 33, 41, 49, 57,
}

// 终结置换表
var finalPermutation = [64]byte{
    24, 56, 16, 48, 8, 40, 0, 32,
    25, 57, 17, 49, 9, 41, 1, 33,
    26, 58, 18, 50, 10, 42, 2, 34,
    27, 59, 19, 51, 11, 43, 3, 35,
    28, 60, 20, 52, 12, 44, 4, 36,
    29, 61, 21, 53, 13, 45, 5, 37,
    30, 62, 22, 54, 14, 46, 6, 38,
    31, 63, 23, 55, 15, 47, 7, 39,
}
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

子密钥的计算

DES初始密钥为64位,其中8位用于奇偶校验,实际密钥为56位,64位初始密钥经过PC-1密钥置换后,生成56位串。经PC-1置换后56位的串,分为左右两部分,各28位,分别左移1位,形成C0和D0,C0和D0合并成56位,经PC-2置换后生成48位子密钥K0。C0和D0分别左移1位,形成C1和D1,C1和D1合并成56位,经PC-2置换后生成子密钥K1。以此类推,直至生成子密钥K15。但注意每轮循环左移的位数,有如下规定:

var ksRotations = [16]uint8{1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}
   
   
   
   
  • 1

image

DES子密钥计算的代码如下:

// creates 16 56-bit subkeys from the original key
func (c *desCipher) generateSubkeys(keyBytes []byte) {
    // PC-1密钥置换,生成56位串
    key := binary.BigEndian.Uint64(keyBytes)
    permutedKey := permuteBlock(key, permutedChoice1[:])

    // 56位串分左右两部分,各28位
    leftRotations := ksRotate(uint32(permutedKey >> 28))
    rightRotations := ksRotate(uint32(permutedKey<<4) >> 4)

    // 生成子密钥
    for i := 0; i < 16; i++ {
        //合并左右两部分,之后PC-2置换
        pc2Input := uint64(leftRotations[i])<<28 | uint64(rightRotations[i])
        c.subkeys[i] = unpack(permuteBlock(pc2Input, permutedChoice2[:]))
    }
}
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3DES

DES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。为解决此问题,出现了3DES,也称Triple DES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。为了兼容普通的DES,3DES并没有直接使用 加密->加密->加密 的方式,而是采用了加密->解密->加密 的方式。

image

当三重密钥均相同时,前两步相互抵消,相当于仅实现了一次加密,因此可实现对普通DES加密算法的兼容。

image

解密

3DES解密过程,与加密过程相反,即逆序使用密钥。是以密钥3、密钥2、密钥1的顺序执行 解密->加密->解密

image

相比DES,3DES因密钥长度变长,安全性有所提高,但其处理速度不高。因此又出现了AES加密算法,AES较于3DES速度更快、安全性更高。

        
展开阅读全文

DES3DES 加解密实例(c++)

11-18 阅读数 9411

DES与3DES加解密实例(c++)DES原理:DES算法是一种对称密码算法,也是一种分组加密的算法,以64位分组对数据加密的,其密钥长度为64位,密钥事实上是56位参与DES运算(第8、16、24、... 博文 来自: blowfire123的博客

对加密的了解(DES/3DES/AES区别 )

03-10 阅读数 3万+

DES1977年1月,美国政府颁布:采纳IBM公司设计的方案作为非机密数据的正式数据加密标准(DES DataEncryptionStandard) 。目前在国内,随着三金工程尤其是金卡工程的启动,D... 博文 来自: 大牛的IT征程

DES3DES 加密算法的调用

06-02 阅读数 773

DES加密常用的概念加密模式ECB模式全称ElectronicCodebook模式,译为电子密码本模式CBC模式全称CipherBlockChaining模式,译为密文分组链接模式CFB模式全称Cip... 博文 来自: 象牙塔下的渣渣


椭圆曲线加密算法

06-03 阅读数 2640

椭圆曲线加密算法,即:EllipticCurveCryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更... 博文 来自: 象牙塔下的渣渣

DES加密

06-16 阅读数 582

概念DES全称为DataEncryptionStandard,即数据加密标准。1997年数据加密标准DES正式公布,其分组长度为64比特,密钥长度为64比特,其中8比特为奇偶校验位,所以实际长度为56... 博文 来自: 像风走过八千里

DES加密教程详细解读

12-10 阅读数 1万+

1997年数据加密标准DES正式公布,其分组长度为64比特,密钥长度为64比特,其中8比特为奇偶校验位,所以实际长度为56比特。现在DES已经被AES所取代。1)DES的加密过程明文64位->初始置换... 博文 来自: aiting的博客

DES加密解密

02-21 阅读数 799

DES加密maven依赖:&lt;!--DES--&gt;&lt;dependency&gt;&lt;groupId&gt;javax.xml.rpc&... 博文 来自: JcMR_Li的博客

DES 加密

08-21 阅读数 133

2013-11-1813:45:46privatestaticbyte[]Keys={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF};///&lt;summa... 博文 来自: jiidd的专栏


ripemd160 加密算法

06-02 阅读数 2574

哈希值的输出值一般是16进制的字符串。而16进制字符串,每两个字符占一个字节。我们知道,一个字节=8bit.以sha256为例:-256bit-&gt;64位16进制字符。packagemai... 博文 来自: 象牙塔下的渣渣

DES算法原理完整版

02-14 阅读数 7万+

1.所需参数key:8个字节共64位的工作密钥data:8个字节共64位的需要被加密或被解密的数据mode:DES工作方式,加密或者解密2.初始置换DES算法使用64位的密钥key将64位的明文输入块... 博文 来自: 朱小姐。的博客

		
sxy_Fighting关注
sxy_Fighting

20篇文章

排名:千里之外

武倔关注
武倔

22篇文章

排名:千里之外

大牛的征程关注
大牛的征程

74篇文章

排名:千里之外

DES算法简单介绍及用法

05-16 阅读数 3601

大家好,今天给大家分享一下DES加密一、DES介绍加密一般分为可逆加密和不可逆加密,其中可逆加密一般又分为对称加密和非对称加密,前者是我们使用公用密钥加密之后可以使用公用密钥再解密出来,而后者则是使用... 博文 来自: weixin_41910244的博客

java的DES3DES加解密算法

06-29 阅读数 1106

packagecom.example.yang.myapplication;importjava.security.SecureRandom;importjavax.crypto.Cipher;imp... 博文 来自: 不追求别人眼中的最好,把自己的事情做得最好。贵在坚持,难在坚持。天天学习,好好向上

DES & 3DES

10-08 阅读数 587

DES是美国1977-1998年数据加密标准DES(DataEncryptionStandard)数据加密标准算法,采用56bits密钥加密64bits数据成密文的一种分组密码,其基本结构为Feist... 博文 来自: 哎一入江湖岁月催的专栏


S-DES加密算法介绍与实现

05-30 阅读数 7292

为了更好地理解DES算法,美国圣克拉拉大学的EdwardSchaefer教授于1996年开发了SimplfiedDES方案,简称S-DES方案。它是一个供教学而非安全使用的加密算法,它与DES的特性和... 博文 来自: ftx456789的博客

JAVA实现DES加密和解密

07-17 阅读数 1万+

JAVA实现DES加密、JAVA实现DES解密 博文 来自: 新新

3DES 算法

10-07

在网上找到这么个算法进行3DES加密的,我测试后,发现可以用16密钥对8字节明文加密,对16字节明文加密就失败了。对8字节明文是直接加密的,不知道对16字节明文应该采用什么方法?我目前采用的是以下方法 论坛

3DES加密,代码得出的结果跟在线加密得出的结果不一致

06-06

这个是在线加密网站得出的结果。 密钥:346c70393ffe88c7 明文:{“operationCode”:”00002004”,”userName”:”zhangsan”,”mobile”:” 论坛

常用加密方式DES3DES、AES、MD5

06-19 阅读数 2353

最近需要用到加密这块,然后记录一下常用的加密,方便以后使用的时候,不要手忙脚乱的查找。DES:数据加密标准,密钥偏短(56位)、生命周期短(避免被破解)。3DES:密钥长度112位或168位,通过增加... 博文 来自: qq_33240767的博客


JAVA中3DES加密示例

10-17 阅读数 1135

本问只简要讲解在JAVA中如何使用几种加密的代码示例,关于加密算法和数学知识不在本文讨论范围。packagecom.util;importjava.security.NoSuchAlgorithmEx... 博文 来自: qq_32133405的博客

sha256 加密算法

05-21 阅读数 5096

sha256加密算法go调用sha256加密字符串哈希值packagemainimport("fmt""crypto/sha256""io"... 博文 来自: 我不是大牛

3DES 分类

05-03 阅读数 910

3DES3DES,分为2种,一个是双倍长3DES,一个是三倍长3DES。如果是双倍长3DES,密钥为32字节长,按左右,分别LK(密钥的左边16字节),RK(密钥的右边16字节)。加密内容DATA为1... 博文 来自: abc

数据加密算法--详解DES算法原理与实现

07-30 阅读数 9829

DES算法简介DES(DataEncryptionStandard)是目前最为流行的加密算法之一。DES是对称的,也就是说它使用同一个密钥来加密和解密数据。DES还是一种分组加密算法,该算法每次处理固... 博文 来自: qq_42606051的博客

C#DES加密解密

04-13 阅读数 20

关于DES加密解密由于项目中用到了,主要用在了对登录的用户名进行加密解密。一个程序某些关键信息肯定是要有安全性要求的,这个时候其实就需要加密和解密的过程,保障起安全性。DES,全称DataEncryp... 博文 来自: weixin_33806914的博客


C语言实现DES加密与解密算法

07-20

在网上找到一段用C语言实现的DES加密与解密的源代码,经过改造之后可以加密,也可以解密。但它加密后的密文好象不标准,放到网上(http://des.online-domain-tools.com/)进 论坛

DES加密算法的C++实现

12-06 阅读数 4万+

《信息安全技术》这门课又在讲DES加密算法了,以前用纯C写过一次,这次我用C++重新写了一个,写篇文章以备后用。本文介绍了DES算法加密的大致步骤和整体流程。一、DES算法原理DES算法是一种最通用的... 博文 来自: 神奕的专栏

3DES加密算法

10-06 阅读数 403

3DES(或称为TripleDES)是三重数据加密算法(TDEA,TripleDataEncryptionAlgorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算... 博文 来自: knight20160302的博客

3Des加密

01-03 阅读数 687

    使用3Des加密算法前,我们需要了解一下当前主流的加密模式:单向加密和双向加密,两者最大的区别在于加密的密文是否具有可逆性。    单向加密:将需要加密的数据进行加密,并且密文不可进行解密,像... 博文 来自: T_james的博客

3DES加密算法详解

09-01 阅读数 851

3DES是三重数据加密,且可以逆推的一种算法方案。但由于3DES的算法是公开的,所以算法本身没有密钥可言,主要依靠唯一密钥来确保数据加解密的安全。到目前为止,仍没有人能破解3DES。3DES密钥的长度... 博文 来自: qq_30505673的博客


经典的DES算法详解

10-08 阅读数 4166

译自J.OrlinGrabbe的名作《DESAlgorithmIllustrated》,国外许多大学将该文章作为补充材料,可作为理解DES算法的最佳入门手册。反观许多教材介绍DES时直接照搬一张流程图... 博文 来自: yasinzhang的博客

有关DES的一个实例

04-11 阅读数 2597

才开始学密码学,这个题目能把DES的整个流程(一轮)过一遍增加记忆毕竟新手有错误望与我联系校正整个DES密码(一轮)的流程简单来是把明文64bit分为左右32bit来进行迭代的初始记为 LE0和RE0... 博文 来自: LeoCrytal的博客

3DES

08-26 阅读数 30

3DES一、简介3DES就是为了加强DES的安全性,对数据进行3次DES操作二、加密三要素明文、密文算法加密(加->解->加,目的是为了兼容DES)DES加密DES解密DES加密解密DES... 博文 来自: YIMT_F的博客

对称加密之DES加密算法

07-22 阅读数 1794

对称加密之DES经典算法DES加密算法(DataEncryptionStandard)算法说明:作为DES数据加密标准的算法实现,DEA(DataEncryptionAlgorithm)是一种被广泛应... 博文 来自: Hsuyeungpeng的专栏

C#实现DES加密解密

06-01 阅读数 7591

DES全称为DataEncryptionStandard,即数据加密标准。1997年数据加密标准DES正式公布,其分组长度为64比特,密钥长度为64比特,其中8比特为奇偶校验位,所以实际长度为56比特... 博文 来自: 天涯遍地是小草的博客

DES/3DES(TripleDES)加密、解密测试数据

09-26 阅读数 120

2019独角兽企业重金招聘Python工程师标准>>>... 博文 来自: weixin_34122548的博客


3DES加密解密方法

08-24 阅读数 1958

从数据安全谈起     当你使用网银时,是否担心你的银行卡会被盗用?    当你和朋友用QQ进行聊天时,是否担心你的隐私会被泄露?    作为开发者,编写安全的代码比编写优雅的代码更重要,因为安全是一... 博文 来自: liuyinfei_java的博客

加密算法------DES加密算法详解

04-13 阅读数 3万+

一、加密算法的分类1.对称加解密算法a.通信双方同时掌握一个密钥,加密解密都是由一个密钥完成的(即加密密钥等于解密密钥,加解密密钥可以相互推倒出来)。b.双方通信前共同拟定一个密钥,不对第三方公开。c... 博文 来自: 柯南的博客

DES3DES加解密

12-10 阅读数 459

一、DES和3DES的概念二、需求背景    我们在线上经常使用DES加密用户id,以下简称(encodeId),后端传个前端,前端会使用localStorage保存encodeId,然后调用接口时将... 博文 来自: 燕少江湖

最新文章

  • 旋转数组的最小数字(Golang)《剑指offer》
  • 重建二叉树(Golang)《剑指offer》
  • LeetCode 128. 最长连续序列(Golang)
  • EKT搭建私链
  • LeetCode 234. 回文链表(Golang)

分类专栏

  • 学习笔记 16篇
  • Linux 3篇
  • 区块链 16篇
  • 密码学 18篇
  • 算法 3篇
  • LeetCode 20篇

展开

最新评论

  • HyperLedger Fabri...

    luckydog612:[reply]TBBetter[/reply] 安装对应的数据库,在配置文件里配置

  • HyperLedger Fabri...

    TBBetter:楼主数据库那里怎么配置的?谢谢

  • 零知识证明

    luckydog612:[reply]junior_sky[/reply] 刚接触,理解上是有点困难

  • 零知识证明

    junior_sky:看到最后我都要哭了T_T

	

			

你可能感兴趣的:(java,密码学)