当前位置:首页 » 操作系统 » 3des源码

3des源码

发布时间: 2025-02-04 22:09:16

1. java 接口数据加密和解密

提供一个基于注解实现接口加密解密工具源码,旨在方便在软件项目中对数据进行加密与解密。该工具支持多种加密方式,包括Base64、DES、3DES、AES与RSA,以及MD5加密。

使用方法:只需在需要加密解密的接口上添加相应的注解即可实现功能。

此加密解密组件仅适用于SpringBoot项目。

步骤如下:

1. 从gitee.com/zhao_jian_jun...拉取代码至本地。

2. 使用meavn的install将项目打包为.jar文件。

3. 将加解密依赖引入至项目中。

4. 在配置文件中说明使用的加密方式的秘钥。RSA为非对称加密,需提供两个秘钥。变量名如下:

5. 对请求相应结果加密,使用@ZjjEncryptResponse注解并指定加密方式。

6. 前端接收到的为加密后的数据。

7. 对请求参数进行解密,使用@ZjjDecryptRequest注解。

2. 3des加密 密钥

Des的密钥是8个字节,但实际上只有7个用上,也就是56位。
3des是用3个或2个des密钥加密一串明文,最少112位最多168位。也就是14~21个字母或数字符号。

从安全性上来说密钥位数不足是不能加密的,但有些软件为了保证用户可用,会自动使用某种策略自动填充满,一般是重复填充或采用特定字符,如果你只填了1234作为密钥,有可能真正用于加密的密钥是123412341234123412341或者123400000000000000000类似的。

另外请注意,最好去做3des的密钥位数不是7或8,因为des的加密解密是同一个过程,这样搞在填充后实际上是只使用了一次des加密••••••还不如5位6位好••••••

如果是你编程时碰到的问题,把你的源码发来看看再说。

3. php的3des加密结果与java不一致

这个曾经研究过一点,如果你有php段完整的加密源代码,那么还是有可能做到结果一致的,否则很难,因为虽然都叫3des,但里面却有多种算法,比如php加密时是否使用了向量等等

4. OpenSSL之3DES用法

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

其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1(EK2(Dk3(C)))

本文假设你已经安装好了OpenSSL,并且持有一份1.1.1的源码。
3DES相关的头文件在des.h中、源文件在crypto/des目录中。

# define DES_ENCRYPT 1
# define DES_DECRYPT 0
这里定义了加密和解密的类型。

typedef unsigned int DES_LONG;

这个结构定义了DES的密钥上下文。相关字段含义:
ks —— 16轮子密钥。

在1.1.1中,大多数的数据结构已经不再向使用者开放,从封装的角度来看,这是更合理的。如果你在头文件中找不到结构定义,不妨去源码中搜一搜。

void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
DES_key_schele *ks1, DES_key_schele *ks2,
DES_key_schele *ks3, int enc);
使用电子密码本方式加解密一个分组。
ks1、ks2、ks3分别为传入的三个64位密钥。
其内部实现为:

可以看到内部使用了DES_encrypt3()这个内部分组加密函数,并且传入了3个密钥。

我们继续来看DES_encrypt3()是如何利用这3个密钥的。
void DES_encrypt3(DES_LONG *data, DES_key_schele *ks1,
DES_key_schele *ks2, DES_key_schele *ks3)
其内部实现为:

可以看到内部又继续使用了DES_encrypt2()这个分组加密函数。没有必要再继续解开DES_encrypt2()了,因为它主要根据密钥做分组的加解密处理。

关于三个密钥的利用关系,在DES_encrypt3()中主要是做三次叠加运算:
使用第一个密钥做分组加密运算。
使用第二个密钥做分组解密运算。
使用第三个密钥做分组加密运算。

3DES的叠加运算,根据密钥的组合关系,经常又表现为以下模式:

void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
long length,
DES_key_schele *ks1, DES_key_schele *ks2,
DES_key_schele *ks3, DES_cblock *ivec, int enc);
使用密文分组链加解密。
参数ivec为初使化向量,在本函数返回时会被更新,可用于下一次分组运算。
注:
从源码实现来看,虽然DES_ede3_cbc_encrypt()自身支持明文长度多于一个分组的计算,但是却没有处理填充,所以从统一封装来看,建议开发者在使用这个函数时,同DES_ecb_encrypt()的用法一样,传入单个分组。

下面这个例子演示了使用普通DES加密,3DES的DES的兼容模式解密(即3个密钥完全相同)。

输出:
f8a8707fea7d45cd
3132333435363738

热点内容
安卓哪里填写apple代码 发布:2025-02-05 00:28:54 浏览:288
oppo手机锁屏密码忘记后如何更换 发布:2025-02-05 00:28:19 浏览:25
幼儿思维编程 发布:2025-02-05 00:18:21 浏览:25
我的世界电脑正版如何进入服务器 发布:2025-02-05 00:18:06 浏览:880
疫情防控健康码预警机制演练脚本 发布:2025-02-04 23:58:46 浏览:39
分治算法java 发布:2025-02-04 23:41:15 浏览:593
安卓app点进去就闪退怎么回事 发布:2025-02-04 23:36:56 浏览:779
宏按键编程 发布:2025-02-04 23:05:11 浏览:904
微信隐形密码在哪里设置 发布:2025-02-04 23:05:01 浏览:866
android的补间动画 发布:2025-02-04 23:03:42 浏览:416