`

密码学中的DES简化版

阅读更多
package com.hengyunsoft.cryptography.sign.desimpl;

import java.util.Arrays;
import java.util.Random;

import com.hengyunsoft.cryptography.sign.SignReversible;

public class SimpleDesSign implements SignReversible {

//下面这个是秘钥
private byte[] secretKeys = new byte[] {5,62,54,110,26,57,96,41,96,45,12,74,9,63,7,4,120,44}; //56 bit 秘钥
public SimpleDesSign() {
// Random r = new Random();
// r.nextBytes(secretKeys);
}
@Override
public byte[] encrypt(byte[] b) {
if(b.length != {
throw new IllegalArgumentException();
}
Entity[] fs = new Entity[17];
fs[0] = IP(b);
for (int i = 1; i <= 16; i++) {
fs[i] = new Entity();
fs[i].l = fs[i-1].r;
fs[i].r = xor(fs[i-1].l , f(fs[i-1].r,i));
}
return DIP(fs[16]);
}


/**
* 组合
* @param entity
* @return
*/
private byte[] DIP(Entity entity) {
byte[] result = new byte[8];
byte[] l = entity.l;
for (int i = 0; i < 4; i++) {
result[i] = l[i];
}
l = entity.r;
for (int i = 4; i < 8; i++) {
result[i] = l[i-4];
}
return result;
}

private byte[] xor(byte[] l, byte[] f) {
byte[] result = new byte[l.length];
for (int i = 0; i < l.length; i++) {
result[i] = (byte) (l[i] ^ f[i]);
}
return result;
}

private byte[] f(byte[] r, int secretKeyBitIndex) {
secretKeyBitIndex = secretKeyBitIndex*2;
int index = secretKeyBitIndex >> 3;
int startIndex = secretKeyBitIndex & 7;
byte[] secretKey  = new byte[4];
if(startIndex == 0) {
for (int i = index,j=0; j < secretKey.length; i++,j++) {
secretKey[j] = secretKeys[i];
}
} else {
for (int i = index,j=0; j < secretKey.length; i++,j++) {
secretKey[j] = (byte) ((byte)(secretKeys[i] >> startIndex) | (byte)(secretKeys[i+1] << (8-startIndex))) ;
}
}
byte[] result = new byte[4];
for (int i = 0; i < result.length; i++) {
result[i] = (byte) (r[i] ^ secretKey[i]);
}
return result;
}

private byte[] Df(byte[] r, int i) {

return f(r, i);
}

/**
* 密码分组
* @param b
* @return
*/
private Entity IP(byte[] b) {

Entity result = new Entity();
result.l = Arrays.copyOfRange(b, 0, 4);
result.r = Arrays.copyOfRange(b, 4,;
return result;
}

@Override
public byte[] decrypt(byte[] b) {
if(b.length != {
throw new IllegalArgumentException();
}
Entity[] fs = new Entity[17];
fs[16] = IP(b);
for (int i = 16; i >= 1; i--) {
fs[i-1] = new Entity();
fs[i-1].r = fs[i].l;
fs[i-1].l = xor(fs[i].r , Df(fs[i-1].r,i));
}
return DIP(fs[0]);
}

private static class  Entity{
private byte[] l;
private byte[] r;
}

public static void main(String[] args) {
SimpleDesSign s = new SimpleDesSign();
byte[] encode = s.encrypt("12549632".getBytes());
System.out.println(new String(encode));
System.out.println(new String(s.decrypt(encode)));
}
}
分享到:
评论

相关推荐

    密码学DES java版本

    根据给定的文件信息,我们可以深入探讨“密码学DES java版本”的相关知识点,这涉及到密码学的基本原理、DES算法的工作机制以及如何在Java中实现这一加密标准。 ### 密码学基本概念 密码学是研究数据加密和解密的...

    DES的简化版本,S-DES,密码学资料

    这些置换在S-DES中没有加密意义,只是为了与DES兼容。 S-DES使用两个费斯特轮,每个轮是一个费斯特密码,如图O.4所示。每个轮都使用不同的8位轮密钥,从密钥根据预定义的算法生成。 费斯特轮的结构是一个典型的...

    简化版 des (s-des)

    S-DES,即简化版数据加密标准(Simplified Data Encryption Standard),是由Edward Schaefer教授在Santa Clara大学设计的一种教学用途的加密算法,其目的是为了简化原始的DES算法,便于学习和理解。DES是一种广泛...

    密码学课设,密码学课设题目,C,C++源码.zip

    8. **密码学协议**:如SSL/TLS协议,用于保护网络通信的安全,学习者可能需要实现一个简化版的加密通信协议。 9. **源码实现**:使用C和C++编写密码学算法,需要掌握这两种语言的基本语法,以及如何处理内存管理、...

    C语言simple-des 密码技术实验

    **C语言Simple-DES密码技术实验** 在计算机科学领域,数据加密是保护信息安全的重要手段,而DES(Data Encryption Standard)是...这个实验是学习密码学和C语言编程的良好实践,有助于提升你在安全和编码方面的技能。

    信息安全des算法实现

    "newDes"这个文件可能是实现了上述简化版DES算法的源代码文件。学习和理解这样一个实现可以帮助我们更好地掌握DES的工作原理,以及如何在实际项目中应用对称加密技术来保护数据。对于想要深入理解密码学和信息安全的...

    3圈DES加密及差分攻击破解程序

    然而,DES仍然是密码学教育中的一个重要概念,通过学习和实践3圈DES以及差分攻击,可以深入理解加密算法的弱点和攻击手段,对于网络安全和密码学研究具有重要意义。 总的来说,这个压缩包提供的资源是一个实践性的...

    des.rar_S-DES算法_des linux_des变形_linux_linux des

    它暗示了这是一个关于密码学和加密技术的资源包,特别是围绕DES算法及其在不同操作系统,尤其是Linux环境中的应用和变种。 **描述详解:** 描述中提到的内容表明这是一个包含多种编程语言实现的DES和S-DES算法集合...

    3DES加密解密

    但需要注意的是,尽管3DES比DES更安全,但在现代密码学中,3DES已经被AES(Advanced Encryption Standard)取代,因为AES提供了更高的安全性和更快的加解密速度。 在C语言实现3DES时,需要理解并正确应用加密和解密...

    三重DES加密解密系统

    在密码学领域,DES(Data Encryption Standard)是早期广泛使用的对称加密算法,但由于其56位的密钥长度在现代计算能力下容易被破解,因此三重DES应运而生,将密钥长度有效地扩展到168位。 三重DES的工作原理可以...

    密码学课件及KasumiMisty1和Aria的可执行程序

    在提供的资源中,"海南大学小学期之密码学作业.wps"可能包含了一些关于密码学理论和应用的作业或案例分析,而"Misty"、"aria"和"kasumi"可能是实现这些特定密码算法的可执行程序,可能包括加密和解密功能,这对于...

    第2章-物联网安全的密码学基础.ppt

    《第2章-物联网安全的密码学基础》深入探讨了物联网安全中至关重要的密码学原理。密码学,作为一门研究保密通信的学科,包含了密码编码学和密码分析学两个核心领域。密码编码学关注如何利用密码变化的规律设计加密...

    DES算法matlab实现

    尽管随着技术的发展,DES的安全性已经不再被视为足够强大,但它仍然是理解和学习密码学的一个重要基础。 #### 二、MATLAB中的DES算法实现 本节将详细介绍如何使用MATLAB实现DES算法。这里提供了一个简化的MATLAB...

    南开大学计网的-密码学-课程实验代码.zip

    7. **随机数生成**:在密码学中,高质量的随机数生成器是至关重要的,可能有相关的代码实现。 8. **加密协议**:如SSL/TLS协议的简化版本,用于理解网络通信中的加密过程。 9. **密码分析和安全性测试**:可能包含...

    DES 加密算法汇编程序(适用单片机中)

    这可能意味着避免冗余操作,使用硬件支持的指令,或者采用更快速的算法变种,如简化版的DES(如3DES的两密钥模式)。 3. **硬件支持**:某些单片机可能有硬件加速器来支持特定的加密操作,如位操作和乘法。利用这些...

    DES_zyj.rar_DES MFC_DES_ VC6.0_MFC实现des_des MFC_vc6.0

    总的来说,这个压缩包提供了在老版本的开发环境中使用C++和MFC实现经典加密算法DES的实例,对于学习密码学和Windows应用开发的人来说,这是一个宝贵的资源。尽管现在的加密标准已经发展到AES(Advanced Encryption ...

    DES加密算法 mfc实现vc 6.0

    通过这个工程,开发者可以学习到如何在C++和MFC中实现加密算法,以及如何根据需求调整算法的行为,例如在密码长度超过8位时自动切换到3DES。同时,这也是一个很好的实践案例,展示了如何将复杂的加密算法集成到实际...

    基于Python的DES加密算法实现与示例

    本文详细地展示了用 Python 编写的简化版 DES 数据加密标准的具体实现步骤,其中包括了定义并应用固定的初始化置换表以及逆置换表来进行数据位序变换的方法、S-box替代流程及其背后的机制,并实现了扩展置换E、F函数...

    s-des.rar_s-des

    **S-DES(简化版DES)算法详解** S-DES,即简化版的数据加密标准(Data Encryption Standard),是DES加密算法的一个...学习S-DES有助于初学者逐步掌握密码学的基础知识,并为进一步研究高级加密算法如AES打下基础。

    Java中的密码学非常糟糕。希望不会再这样了。.zip

    Java中的密码学确实曾面临一些挑战,但随着技术的发展,这些问题已经得到了显著改善。这篇讨论将专注于Java在密码学领域的过去问题、当前解决方案以及未来趋势。 在过去,Java的密码学库存在一些显著的问题,比如:...

Global site tag (gtag.js) - Google Analytics