3DES加解密 C语言

摘要:
3DES,它相当于是对每个数据块应用三次DES加密算法。设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文;3DES加密过程为:C=Ek33DES解密过程为:P=Dk1((EK2(Dk3(C)))补齐方式PKCS7k=8,l=数据长度01--iflmodk=k-10202--iflmodk=k-2...kk...kk--iflmodk=0想在数据库中直接对数据进行加密,考虑使用udf函数对数据加密,考虑效率使用c语言更好一些,创建c语言的udf。将openssl源码中的3DES加解密的源代码摘出来,在linux下编译测试。测试成功,然后按照udf的规则重新组织就可以使用了。

3DES(或称为Triple DES),它相当于是对每个数据块应用三次DES加密算法。3*8字节密钥。

设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文;

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

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

补齐方式PKCS7

k=8,l=数据长度

01 -- if l mod k = k-1
02 02 -- if l mod k = k-2
.
.
.
k k ... k k -- if l mod k = 0

想在数据库中直接对数据进行加密,考虑使用udf函数对数据加密,考虑效率使用c语言更好一些,创建c语言的udf。

将openssl源码中的3DES加解密的源代码摘出来,在linux下编译测试。测试成功,然后按照udf的规则重新组织就可以使用了。

$gcc -Wall -O2 -o des3_func des3_func.c  
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 
5 #define DES_LONG unsigned long
6 #define LEN_OF_KEY 24
7  
8 #define ITERATIONS 16
9 
10 #define c2l(c,l)        (l =((DES_LONG)(*((c)++)))    , 
11                          l|=((DES_LONG)(*((c)++)))<< 8L, 
12                          l|=((DES_LONG)(*((c)++)))<<16L, 
13                          l|=((DES_LONG)(*((c)++)))<<24L)
14 
15 
16 #define l2c(l,c)        (*((c)++)=(unsigned char)(((l)     )&0xff), 
17                          *((c)++)=(unsigned char)(((l)>> 8L)&0xff), 
18                          *((c)++)=(unsigned char)(((l)>>16L)&0xff), 
19                          *((c)++)=(unsigned char)(((l)>>24L)&0xff))
20 
21 #define ROTATE(a,n)     (((a)>>(n))+((a)<<(32-(n))))
22 
23 #define LOAD_DATA_tmp(a,b,c,d,e,f) LOAD_DATA(a,b,c,d,e,f,g)
24 #define LOAD_DATA(R,S,u,t,E0,E1,tmp) 
25         u=R^s[S  ]; 
26         t=R^s[S+1]
27         
28 #define D_ENCRYPT(LL,R,S) {
29 LOAD_DATA_tmp(R,S,u,t,E0,E1); 
30         t=ROTATE(t,4); 
31         LL^=32                 DES_SPtrans[0][(u>> 2L)&0x3f]^33                 DES_SPtrans[2][(u>>10L)&0x3f]^34                 DES_SPtrans[4][(u>>18L)&0x3f]^35                 DES_SPtrans[6][(u>>26L)&0x3f]^36                 DES_SPtrans[1][(t>> 2L)&0x3f]^37                 DES_SPtrans[3][(t>>10L)&0x3f]^38                 DES_SPtrans[5][(t>>18L)&0x3f]^39                 DES_SPtrans[7][(t>>26L)&0x3f]; }
40 
41 #define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),
42         (b)^=(t),
43         (a)^=((t)<<(n)))
44 
45 #define IP(l,r) 
46 { 
47 register DES_LONG tt; 
48         PERM_OP(r,l,tt, 4,0x0f0f0f0fL); 
49         PERM_OP(l,r,tt,16,0x0000ffffL); 
50         PERM_OP(r,l,tt, 2,0x33333333L); 
51         PERM_OP(l,r,tt, 8,0x00ff00ffL); 
52         PERM_OP(r,l,tt, 1,0x55555555L); 
53 }
54 
55 #define FP(l,r) 
56 { 
57 register DES_LONG tt; 
58         PERM_OP(l,r,tt, 1,0x55555555L); 
59         PERM_OP(r,l,tt, 8,0x00ff00ffL); 
60         PERM_OP(l,r,tt, 2,0x33333333L); 
61         PERM_OP(r,l,tt,16,0x0000ffffL); 
62         PERM_OP(l,r,tt, 4,0x0f0f0f0fL); 
63 }
64 
65 extern const DES_LONG DES_SPtrans[8][64];         
66 
67 
68 #define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),
69         (a)=(a)^(t)^(t>>(16-(n))))
70 
71 static const DES_LONG des_skb[8][64] ={
72 {
73      /*for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
74      0x00000000L, 0x00000010L, 0x20000000L, 0x20000010L,
75      0x00010000L, 0x00010010L, 0x20010000L, 0x20010010L,
76      0x00000800L, 0x00000810L, 0x20000800L, 0x20000810L,
77      0x00010800L, 0x00010810L, 0x20010800L, 0x20010810L,
78      0x00000020L, 0x00000030L, 0x20000020L, 0x20000030L,
79      0x00010020L, 0x00010030L, 0x20010020L, 0x20010030L,
80      0x00000820L, 0x00000830L, 0x20000820L, 0x20000830L,
81      0x00010820L, 0x00010830L, 0x20010820L, 0x20010830L,
82      0x00080000L, 0x00080010L, 0x20080000L, 0x20080010L,
83      0x00090000L, 0x00090010L, 0x20090000L, 0x20090010L,
84      0x00080800L, 0x00080810L, 0x20080800L, 0x20080810L,
85      0x00090800L, 0x00090810L, 0x20090800L, 0x20090810L,
86      0x00080020L, 0x00080030L, 0x20080020L, 0x20080030L,
87      0x00090020L, 0x00090030L, 0x20090020L, 0x20090030L,
88      0x00080820L, 0x00080830L, 0x20080820L, 0x20080830L,
89      0x00090820L, 0x00090830L, 0x20090820L, 0x20090830L,
90 },
91 {
92      /*for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
93      0x00000000L, 0x02000000L, 0x00002000L, 0x02002000L,
94      0x00200000L, 0x02200000L, 0x00202000L, 0x02202000L,
95      0x00000004L, 0x02000004L, 0x00002004L, 0x02002004L,
96      0x00200004L, 0x02200004L, 0x00202004L, 0x02202004L,
97      0x00000400L, 0x02000400L, 0x00002400L, 0x02002400L,
98      0x00200400L, 0x02200400L, 0x00202400L, 0x02202400L,
99      0x00000404L, 0x02000404L, 0x00002404L, 0x02002404L,
100      0x00200404L, 0x02200404L, 0x00202404L, 0x02202404L,
101      0x10000000L, 0x12000000L, 0x10002000L, 0x12002000L,
102      0x10200000L, 0x12200000L, 0x10202000L, 0x12202000L,
103      0x10000004L, 0x12000004L, 0x10002004L, 0x12002004L,
104      0x10200004L, 0x12200004L, 0x10202004L, 0x12202004L,
105      0x10000400L, 0x12000400L, 0x10002400L, 0x12002400L,
106      0x10200400L, 0x12200400L, 0x10202400L, 0x12202400L,
107      0x10000404L, 0x12000404L, 0x10002404L, 0x12002404L,
108      0x10200404L, 0x12200404L, 0x10202404L, 0x12202404L,
109 },
110 {
111      /*for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
112      0x00000000L, 0x00000001L, 0x00040000L, 0x00040001L,
113      0x01000000L, 0x01000001L, 0x01040000L, 0x01040001L,
114      0x00000002L, 0x00000003L, 0x00040002L, 0x00040003L,
115      0x01000002L, 0x01000003L, 0x01040002L, 0x01040003L,
116      0x00000200L, 0x00000201L, 0x00040200L, 0x00040201L,
117      0x01000200L, 0x01000201L, 0x01040200L, 0x01040201L,
118      0x00000202L, 0x00000203L, 0x00040202L, 0x00040203L,
119      0x01000202L, 0x01000203L, 0x01040202L, 0x01040203L,
120      0x08000000L, 0x08000001L, 0x08040000L, 0x08040001L,
121      0x09000000L, 0x09000001L, 0x09040000L, 0x09040001L,
122      0x08000002L, 0x08000003L, 0x08040002L, 0x08040003L,
123      0x09000002L, 0x09000003L, 0x09040002L, 0x09040003L,
124      0x08000200L, 0x08000201L, 0x08040200L, 0x08040201L,
125      0x09000200L, 0x09000201L, 0x09040200L, 0x09040201L,
126      0x08000202L, 0x08000203L, 0x08040202L, 0x08040203L,
127      0x09000202L, 0x09000203L, 0x09040202L, 0x09040203L,
128 },
129 {
130      /*for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
131      0x00000000L, 0x00100000L, 0x00000100L, 0x00100100L,
132      0x00000008L, 0x00100008L, 0x00000108L, 0x00100108L,
133      0x00001000L, 0x00101000L, 0x00001100L, 0x00101100L,
134      0x00001008L, 0x00101008L, 0x00001108L, 0x00101108L,
135      0x04000000L, 0x04100000L, 0x04000100L, 0x04100100L,
136      0x04000008L, 0x04100008L, 0x04000108L, 0x04100108L,
137      0x04001000L, 0x04101000L, 0x04001100L, 0x04101100L,
138      0x04001008L, 0x04101008L, 0x04001108L, 0x04101108L,
139      0x00020000L, 0x00120000L, 0x00020100L, 0x00120100L,
140      0x00020008L, 0x00120008L, 0x00020108L, 0x00120108L,
141      0x00021000L, 0x00121000L, 0x00021100L, 0x00121100L,
142      0x00021008L, 0x00121008L, 0x00021108L, 0x00121108L,
143      0x04020000L, 0x04120000L, 0x04020100L, 0x04120100L,
144      0x04020008L, 0x04120008L, 0x04020108L, 0x04120108L,
145      0x04021000L, 0x04121000L, 0x04021100L, 0x04121100L,
146      0x04021008L, 0x04121008L, 0x04021108L, 0x04121108L,
147 },
148 {
149      /*for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
150      0x00000000L, 0x10000000L, 0x00010000L, 0x10010000L,
151      0x00000004L, 0x10000004L, 0x00010004L, 0x10010004L,
152      0x20000000L, 0x30000000L, 0x20010000L, 0x30010000L,
153      0x20000004L, 0x30000004L, 0x20010004L, 0x30010004L,
154      0x00100000L, 0x10100000L, 0x00110000L, 0x10110000L,
155      0x00100004L, 0x10100004L, 0x00110004L, 0x10110004L,
156      0x20100000L, 0x30100000L, 0x20110000L, 0x30110000L,
157      0x20100004L, 0x30100004L, 0x20110004L, 0x30110004L,
158      0x00001000L, 0x10001000L, 0x00011000L, 0x10011000L,
159      0x00001004L, 0x10001004L, 0x00011004L, 0x10011004L,
160      0x20001000L, 0x30001000L, 0x20011000L, 0x30011000L,
161      0x20001004L, 0x30001004L, 0x20011004L, 0x30011004L,
162      0x00101000L, 0x10101000L, 0x00111000L, 0x10111000L,
163      0x00101004L, 0x10101004L, 0x00111004L, 0x10111004L,
164      0x20101000L, 0x30101000L, 0x20111000L, 0x30111000L,
165      0x20101004L, 0x30101004L, 0x20111004L, 0x30111004L,
166 },
167 {
168      /*for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
169      0x00000000L, 0x08000000L, 0x00000008L, 0x08000008L,
170      0x00000400L, 0x08000400L, 0x00000408L, 0x08000408L,
171      0x00020000L, 0x08020000L, 0x00020008L, 0x08020008L,
172      0x00020400L, 0x08020400L, 0x00020408L, 0x08020408L,
173      0x00000001L, 0x08000001L, 0x00000009L, 0x08000009L,
174      0x00000401L, 0x08000401L, 0x00000409L, 0x08000409L,
175      0x00020001L, 0x08020001L, 0x00020009L, 0x08020009L,
176      0x00020401L, 0x08020401L, 0x00020409L, 0x08020409L,
177      0x02000000L, 0x0A000000L, 0x02000008L, 0x0A000008L,
178      0x02000400L, 0x0A000400L, 0x02000408L, 0x0A000408L,
179      0x02020000L, 0x0A020000L, 0x02020008L, 0x0A020008L,
180      0x02020400L, 0x0A020400L, 0x02020408L, 0x0A020408L,
181      0x02000001L, 0x0A000001L, 0x02000009L, 0x0A000009L,
182      0x02000401L, 0x0A000401L, 0x02000409L, 0x0A000409L,
183      0x02020001L, 0x0A020001L, 0x02020009L, 0x0A020009L,
184      0x02020401L, 0x0A020401L, 0x02020409L, 0x0A020409L,
185 },
186 {
187      /*for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
188      0x00000000L, 0x00000100L, 0x00080000L, 0x00080100L,
189      0x01000000L, 0x01000100L, 0x01080000L, 0x01080100L,
190      0x00000010L, 0x00000110L, 0x00080010L, 0x00080110L,
191      0x01000010L, 0x01000110L, 0x01080010L, 0x01080110L,
192      0x00200000L, 0x00200100L, 0x00280000L, 0x00280100L,
193      0x01200000L, 0x01200100L, 0x01280000L, 0x01280100L,
194      0x00200010L, 0x00200110L, 0x00280010L, 0x00280110L,
195      0x01200010L, 0x01200110L, 0x01280010L, 0x01280110L,
196      0x00000200L, 0x00000300L, 0x00080200L, 0x00080300L,
197      0x01000200L, 0x01000300L, 0x01080200L, 0x01080300L,
198      0x00000210L, 0x00000310L, 0x00080210L, 0x00080310L,
199      0x01000210L, 0x01000310L, 0x01080210L, 0x01080310L,
200      0x00200200L, 0x00200300L, 0x00280200L, 0x00280300L,
201      0x01200200L, 0x01200300L, 0x01280200L, 0x01280300L,
202      0x00200210L, 0x00200310L, 0x00280210L, 0x00280310L,
203      0x01200210L, 0x01200310L, 0x01280210L, 0x01280310L,
204 },
205 {
206      /*for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
207      0x00000000L, 0x04000000L, 0x00040000L, 0x04040000L,
208      0x00000002L, 0x04000002L, 0x00040002L, 0x04040002L,
209      0x00002000L, 0x04002000L, 0x00042000L, 0x04042000L,
210      0x00002002L, 0x04002002L, 0x00042002L, 0x04042002L,
211      0x00000020L, 0x04000020L, 0x00040020L, 0x04040020L,
212      0x00000022L, 0x04000022L, 0x00040022L, 0x04040022L,
213      0x00002020L, 0x04002020L, 0x00042020L, 0x04042020L,
214      0x00002022L, 0x04002022L, 0x00042022L, 0x04042022L,
215      0x00000800L, 0x04000800L, 0x00040800L, 0x04040800L,
216      0x00000802L, 0x04000802L, 0x00040802L, 0x04040802L,
217      0x00002800L, 0x04002800L, 0x00042800L, 0x04042800L,
218      0x00002802L, 0x04002802L, 0x00042802L, 0x04042802L,
219      0x00000820L, 0x04000820L, 0x00040820L, 0x04040820L,
220      0x00000822L, 0x04000822L, 0x00040822L, 0x04040822L,
221      0x00002820L, 0x04002820L, 0x00042820L, 0x04042820L,
222      0x00002822L, 0x04002822L, 0x00042822L, 0x04042822L,
223 }
224 };
225        
226 const DES_LONG DES_SPtrans[8][64] ={
227 {
228         /*nibble 0 */
229         0x02080800L, 0x00080000L, 0x02000002L, 0x02080802L,
230         0x02000000L, 0x00080802L, 0x00080002L, 0x02000002L,
231         0x00080802L, 0x02080800L, 0x02080000L, 0x00000802L,
232         0x02000802L, 0x02000000L, 0x00000000L, 0x00080002L,
233         0x00080000L, 0x00000002L, 0x02000800L, 0x00080800L,
234         0x02080802L, 0x02080000L, 0x00000802L, 0x02000800L,
235         0x00000002L, 0x00000800L, 0x00080800L, 0x02080002L,
236         0x00000800L, 0x02000802L, 0x02080002L, 0x00000000L,
237         0x00000000L, 0x02080802L, 0x02000800L, 0x00080002L,
238         0x02080800L, 0x00080000L, 0x00000802L, 0x02000800L,
239         0x02080002L, 0x00000800L, 0x00080800L, 0x02000002L,
240         0x00080802L, 0x00000002L, 0x02000002L, 0x02080000L,
241         0x02080802L, 0x00080800L, 0x02080000L, 0x02000802L,
242         0x02000000L, 0x00000802L, 0x00080002L, 0x00000000L,
243         0x00080000L, 0x02000000L, 0x02000802L, 0x02080800L,
244         0x00000002L, 0x02080002L, 0x00000800L, 0x00080802L,
245 },
246 {
247         /*nibble 1 */
248         0x40108010L, 0x00000000L, 0x00108000L, 0x40100000L,
249         0x40000010L, 0x00008010L, 0x40008000L, 0x00108000L,
250         0x00008000L, 0x40100010L, 0x00000010L, 0x40008000L,
251         0x00100010L, 0x40108000L, 0x40100000L, 0x00000010L,
252         0x00100000L, 0x40008010L, 0x40100010L, 0x00008000L,
253         0x00108010L, 0x40000000L, 0x00000000L, 0x00100010L,
254         0x40008010L, 0x00108010L, 0x40108000L, 0x40000010L,
255         0x40000000L, 0x00100000L, 0x00008010L, 0x40108010L,
256         0x00100010L, 0x40108000L, 0x40008000L, 0x00108010L,
257         0x40108010L, 0x00100010L, 0x40000010L, 0x00000000L,
258         0x40000000L, 0x00008010L, 0x00100000L, 0x40100010L,
259         0x00008000L, 0x40000000L, 0x00108010L, 0x40008010L,
260         0x40108000L, 0x00008000L, 0x00000000L, 0x40000010L,
261         0x00000010L, 0x40108010L, 0x00108000L, 0x40100000L,
262         0x40100010L, 0x00100000L, 0x00008010L, 0x40008000L,
263         0x40008010L, 0x00000010L, 0x40100000L, 0x00108000L,
264 },
265 {
266         /*nibble 2 */
267         0x04000001L, 0x04040100L, 0x00000100L, 0x04000101L,
268         0x00040001L, 0x04000000L, 0x04000101L, 0x00040100L,
269         0x04000100L, 0x00040000L, 0x04040000L, 0x00000001L,
270         0x04040101L, 0x00000101L, 0x00000001L, 0x04040001L,
271         0x00000000L, 0x00040001L, 0x04040100L, 0x00000100L,
272         0x00000101L, 0x04040101L, 0x00040000L, 0x04000001L,
273         0x04040001L, 0x04000100L, 0x00040101L, 0x04040000L,
274         0x00040100L, 0x00000000L, 0x04000000L, 0x00040101L,
275         0x04040100L, 0x00000100L, 0x00000001L, 0x00040000L,
276         0x00000101L, 0x00040001L, 0x04040000L, 0x04000101L,
277         0x00000000L, 0x04040100L, 0x00040100L, 0x04040001L,
278         0x00040001L, 0x04000000L, 0x04040101L, 0x00000001L,
279         0x00040101L, 0x04000001L, 0x04000000L, 0x04040101L,
280         0x00040000L, 0x04000100L, 0x04000101L, 0x00040100L,
281         0x04000100L, 0x00000000L, 0x04040001L, 0x00000101L,
282         0x04000001L, 0x00040101L, 0x00000100L, 0x04040000L,
283 },
284 {
285         /*nibble 3 */
286         0x00401008L, 0x10001000L, 0x00000008L, 0x10401008L,
287         0x00000000L, 0x10400000L, 0x10001008L, 0x00400008L,
288         0x10401000L, 0x10000008L, 0x10000000L, 0x00001008L,
289         0x10000008L, 0x00401008L, 0x00400000L, 0x10000000L,
290         0x10400008L, 0x00401000L, 0x00001000L, 0x00000008L,
291         0x00401000L, 0x10001008L, 0x10400000L, 0x00001000L,
292         0x00001008L, 0x00000000L, 0x00400008L, 0x10401000L,
293         0x10001000L, 0x10400008L, 0x10401008L, 0x00400000L,
294         0x10400008L, 0x00001008L, 0x00400000L, 0x10000008L,
295         0x00401000L, 0x10001000L, 0x00000008L, 0x10400000L,
296         0x10001008L, 0x00000000L, 0x00001000L, 0x00400008L,
297         0x00000000L, 0x10400008L, 0x10401000L, 0x00001000L,
298         0x10000000L, 0x10401008L, 0x00401008L, 0x00400000L,
299         0x10401008L, 0x00000008L, 0x10001000L, 0x00401008L,
300         0x00400008L, 0x00401000L, 0x10400000L, 0x10001008L,
301         0x00001008L, 0x10000000L, 0x10000008L, 0x10401000L,
302 },
303 {
304         /*nibble 4 */
305         0x08000000L, 0x00010000L, 0x00000400L, 0x08010420L,
306         0x08010020L, 0x08000400L, 0x00010420L, 0x08010000L,
307         0x00010000L, 0x00000020L, 0x08000020L, 0x00010400L,
308         0x08000420L, 0x08010020L, 0x08010400L, 0x00000000L,
309         0x00010400L, 0x08000000L, 0x00010020L, 0x00000420L,
310         0x08000400L, 0x00010420L, 0x00000000L, 0x08000020L,
311         0x00000020L, 0x08000420L, 0x08010420L, 0x00010020L,
312         0x08010000L, 0x00000400L, 0x00000420L, 0x08010400L,
313         0x08010400L, 0x08000420L, 0x00010020L, 0x08010000L,
314         0x00010000L, 0x00000020L, 0x08000020L, 0x08000400L,
315         0x08000000L, 0x00010400L, 0x08010420L, 0x00000000L,
316         0x00010420L, 0x08000000L, 0x00000400L, 0x00010020L,
317         0x08000420L, 0x00000400L, 0x00000000L, 0x08010420L,
318         0x08010020L, 0x08010400L, 0x00000420L, 0x00010000L,
319         0x00010400L, 0x08010020L, 0x08000400L, 0x00000420L,
320         0x00000020L, 0x00010420L, 0x08010000L, 0x08000020L,
321 },
322 {
323         /*nibble 5 */
324         0x80000040L, 0x00200040L, 0x00000000L, 0x80202000L,
325         0x00200040L, 0x00002000L, 0x80002040L, 0x00200000L,
326         0x00002040L, 0x80202040L, 0x00202000L, 0x80000000L,
327         0x80002000L, 0x80000040L, 0x80200000L, 0x00202040L,
328         0x00200000L, 0x80002040L, 0x80200040L, 0x00000000L,
329         0x00002000L, 0x00000040L, 0x80202000L, 0x80200040L,
330         0x80202040L, 0x80200000L, 0x80000000L, 0x00002040L,
331         0x00000040L, 0x00202000L, 0x00202040L, 0x80002000L,
332         0x00002040L, 0x80000000L, 0x80002000L, 0x00202040L,
333         0x80202000L, 0x00200040L, 0x00000000L, 0x80002000L,
334         0x80000000L, 0x00002000L, 0x80200040L, 0x00200000L,
335         0x00200040L, 0x80202040L, 0x00202000L, 0x00000040L,
336         0x80202040L, 0x00202000L, 0x00200000L, 0x80002040L,
337         0x80000040L, 0x80200000L, 0x00202040L, 0x00000000L,
338         0x00002000L, 0x80000040L, 0x80002040L, 0x80202000L,
339         0x80200000L, 0x00002040L, 0x00000040L, 0x80200040L,
340 },
341 {
342         /*nibble 6 */
343         0x00004000L, 0x00000200L, 0x01000200L, 0x01000004L,
344         0x01004204L, 0x00004004L, 0x00004200L, 0x00000000L,
345         0x01000000L, 0x01000204L, 0x00000204L, 0x01004000L,
346         0x00000004L, 0x01004200L, 0x01004000L, 0x00000204L,
347         0x01000204L, 0x00004000L, 0x00004004L, 0x01004204L,
348         0x00000000L, 0x01000200L, 0x01000004L, 0x00004200L,
349         0x01004004L, 0x00004204L, 0x01004200L, 0x00000004L,
350         0x00004204L, 0x01004004L, 0x00000200L, 0x01000000L,
351         0x00004204L, 0x01004000L, 0x01004004L, 0x00000204L,
352         0x00004000L, 0x00000200L, 0x01000000L, 0x01004004L,
353         0x01000204L, 0x00004204L, 0x00004200L, 0x00000000L,
354         0x00000200L, 0x01000004L, 0x00000004L, 0x01000200L,
355         0x00000000L, 0x01000204L, 0x01000200L, 0x00004200L,
356         0x00000204L, 0x00004000L, 0x01004204L, 0x01000000L,
357         0x01004200L, 0x00000004L, 0x00004004L, 0x01004204L,
358         0x01000004L, 0x01004200L, 0x01004000L, 0x00004004L,
359 },
360 {
361         /*nibble 7 */
362         0x20800080L, 0x20820000L, 0x00020080L, 0x00000000L,
363         0x20020000L, 0x00800080L, 0x20800000L, 0x20820080L,
364         0x00000080L, 0x20000000L, 0x00820000L, 0x00020080L,
365         0x00820080L, 0x20020080L, 0x20000080L, 0x20800000L,
366         0x00020000L, 0x00820080L, 0x00800080L, 0x20020000L,
367         0x20820080L, 0x20000080L, 0x00000000L, 0x00820000L,
368         0x20000000L, 0x00800000L, 0x20020080L, 0x20800080L,
369         0x00800000L, 0x00020000L, 0x20820000L, 0x00000080L,
370         0x00800000L, 0x00020000L, 0x20000080L, 0x20820080L,
371         0x00020080L, 0x20000000L, 0x00000000L, 0x00820000L,
372         0x20800080L, 0x20020080L, 0x20020000L, 0x00800080L,
373         0x20820000L, 0x00000080L, 0x00800080L, 0x20020000L,
374         0x20820080L, 0x00800000L, 0x20800000L, 0x20000080L,
375         0x00820000L, 0x00020080L, 0x20020080L, 0x20800000L,
376         0x00000080L, 0x20820000L, 0x00820080L, 0x00000000L,
377         0x20000000L, 0x20800080L, 0x00020000L, 0x00820080L,
378 }
379 };
380                 
381 
382 typedef unsigned char DES_cblock[8];
383 typedef /*const */ unsigned char const_DES_cblock[8];
384 
385 
386 typedef structDES_ks {
387 union {
388 DES_cblock cblock;
389         /*
390 * make sure things are correct size on machines with 8 byte longs
391          */
392         DES_LONG deslong[2];
393     } ks[16];
394 } DES_key_schedule;
395 
396 
397 # define DES_ENCRYPT     1
398 # define DES_DECRYPT     0
399 
400 
401 
402 void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output,
403                       DES_key_schedule *ks1, DES_key_schedule *ks2,
404                       DES_key_schedule *ks3, intenc);
405 
406 
407 void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, intenc);
408 
409 void DES_encrypt2(DES_LONG *data, DES_key_schedule *ks, intenc);
410 
411 void DES_encrypt3(DES_LONG *data, DES_key_schedule *ks1,
412                   DES_key_schedule *ks2, DES_key_schedule *ks3);
413 void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
414                   DES_key_schedule *ks2, DES_key_schedule *ks3);
415                   
416 void DES_set_key_unchecked(const_DES_cblock *key, DES_key_schedule *schedule);
417 
418 
419 
420 /************************************************************************
421 * 3DES-ECB加密方式
422 * 8字节密钥,加密内容8位补齐,补齐方式为:PKCS7。
423 *
424 * file: des3_func.c.c
425 * gcc -Wall -O2 -o des3_func des3_func.c 
426 *
427 * @author  Edward
428 *
429 ************************************************************************/
430 int main(int argc, char *argv[])
431 {
432     int i = 0;
433     int len = 0;
434     int nlen = 0;
435     int klen = 0;
436  
437     char ch = '

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用apt-mirror建立局域网内的Debian/Ubuntu源镜像详细解释VB连接access几种方法数据库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言 锁的使用总结

1. C 互斥锁 mutex初始化与去初始化 #include <pthread.h>int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);int pthread_mutex_destroy(pthread_mutex_t *mutex);...

C指针——C语言手记

近期敲代码的时候。发现自己非常多东西都開始忘了。 今天最终有机会好好总结一下指针。当做个笔记同一时候也希望对大家实用。假设有不对的地方。希望大家能帮我指正一下。然后我的实验环境是32位RHEL+eclipse。 一、指针基本属性 指针的属性主要包含指针的类型、指针所指向的类型、指针的值。以下以一个简单的样例为例 int *p; 指针的类型:int *...

C语言实现反射

高级语言的反射机制,简单来说就是可以通过字符串型获取对应的类或者函数。 基础形式,c语言结构化编程基础实现 1)声明 typedef void (*callback)(void); typedef struct { const char *name; callback fn; }callba...

我的全栈之路-C语言基础之C语言概述与开发环境搭建

我的全栈之路-C语言基础之C语言概述与开发环境搭建 我的全栈之路 1.1 信息技术发展趋势 1.2 浅谈计算机系统架构 1.2.1 计算机系统架构概述 1.2.2 计算机硬件系统 1.2.3 计算机软件系统 1.3 程序和指令 1.4 计算机编程语言发展史 1.5 程序的编译和解释 1.6 计算机语言应用场景 1.7 C语言概览 1.7.1 C...

C语言-枚举 enum,typedef

目录 枚举 枚举的注意事项 使用规范 typedef 枚举 请声明一个变量保存一个人的性别 ,一个人的学历,一个方向,这样用 char 类型是不是不能全部给保存下,性别有男女两个值,但是你定义一个也只能保存一个值 某些变量的取值是限定的,变量的取值只能是指定的几个值当中的任意一个,除此之外的不行 C语言没有提供那么我就自己定义一个限定取值的类...

C语言 枚举类型

https://www.runoob.com/cprogramming/c-enum.html C enum(枚举) 枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个...