谁给我个md5等加密算法c++的现成类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁给我个md5等加密算法c++的现成类相关的知识,希望对你有一定的参考价值。
谢谢 给一个加密算法给20分!谢谢啦 最好能执行的- -``
谢谢大家 我自己解决了`
Private Const BITS_TO_A_BYTE = 8
Private Const BYTES_TO_A_WORD = 4
Private Const BITS_TO_A_WORD = 32
Private m_lOnBits(30)
Private m_l2Power(30)
Private Function LShift(lValue, iShiftBits)
If iShiftBits = 0 Then
LShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And 1 Then
LShift = &H80000000
Else
LShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If
If (lValue And m_l2Power(31 - iShiftBits)) Then
LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000
Else
LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits))
End If
End Function
Private Function RShift(lValue, iShiftBits)
If iShiftBits = 0 Then
RShift = lValue
Exit Function
ElseIf iShiftBits = 31 Then
If lValue And &H80000000 Then
RShift = 1
Else
RShift = 0
End If
Exit Function
ElseIf iShiftBits < 0 Or iShiftBits > 31 Then
Err.Raise 6
End If
RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits)
If (lValue And &H80000000) Then
RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1)))
End If
End Function
Private Function RotateLeft(lValue, iShiftBits)
RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits))
End Function
Private Function AddUnsigned(lX, lY)
Dim lX4
Dim lY4
Dim lX8
Dim lY8
Dim lResult
lX8 = lX And &H80000000
lY8 = lY And &H80000000
lX4 = lX And &H40000000
lY4 = lY And &H40000000
lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF)
If lX4 And lY4 Then
lResult = lResult Xor &H80000000 Xor lX8 Xor lY8
ElseIf lX4 Or lY4 Then
If lResult And &H40000000 Then
lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8
Else
lResult = lResult Xor &H40000000 Xor lX8 Xor lY8
End If
Else
lResult = lResult Xor lX8 Xor lY8
End If
AddUnsigned = lResult
End Function
Private Function md5_F(x, y, z)
md5_F = (x And y) Or ((Not x) And z)
End Function
Private Function md5_G(x, y, z)
md5_G = (x And z) Or (y And (Not z))
End Function
Private Function md5_H(x, y, z)
md5_H = (x Xor y Xor z)
End Function
Private Function md5_I(x, y, z)
md5_I = (y Xor (x Or (Not z)))
End Function
Private Sub md5_FF(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Sub md5_GG(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Sub md5_HH(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Sub md5_II(a, b, c, d, x, s, ac)
a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac))
a = RotateLeft(a, s)
a = AddUnsigned(a, b)
End Sub
Private Function ConvertToWordArray(sMessage)
Dim lMessageLength
Dim lNumberOfWords
Dim lWordArray()
Dim lBytePosition
Dim lByteCount
Dim lWordCount
Const MODULUS_BITS = 512
Const CONGRUENT_BITS = 448
lMessageLength = Len(sMessage)
lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD)
ReDim lWordArray(lNumberOfWords - 1)
lBytePosition = 0
lByteCount = 0
Do Until lByteCount >= lMessageLength
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(Asc(Mid(sMessage, lByteCount + 1, 1)), lBytePosition)
lByteCount = lByteCount + 1
Loop
lWordCount = lByteCount \ BYTES_TO_A_WORD
lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE
lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition)
lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3)
lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29)
ConvertToWordArray = lWordArray
End Function
Private Function WordToHex(lValue)
Dim lByte
Dim lCount
For lCount = 0 To 3
lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1)
WordToHex = WordToHex & Right("0" & Hex(lByte), 2)
Next
End Function
Public Function MD5(sMessage)
m_lOnBits(0) = CLng(1)
m_lOnBits(1) = CLng(3)
m_lOnBits(2) = CLng(7)
m_lOnBits(3) = CLng(15)
m_lOnBits(4) = CLng(31)
m_lOnBits(5) = CLng(63)
m_lOnBits(6) = CLng(127)
m_lOnBits(7) = CLng(255)
m_lOnBits(8) = CLng(511)
m_lOnBits(9) = CLng(1023)
m_lOnBits(10) = CLng(2047)
m_lOnBits(11) = CLng(4095)
m_lOnBits(12) = CLng(8191)
m_lOnBits(13) = CLng(16383)
m_lOnBits(14) = CLng(32767)
m_lOnBits(15) = CLng(65535)
m_lOnBits(16) = CLng(131071)
m_lOnBits(17) = CLng(262143)
m_lOnBits(18) = CLng(524287)
m_lOnBits(19) = CLng(1048575)
m_lOnBits(20) = CLng(2097151)
m_lOnBits(21) = CLng(4194303)
m_lOnBits(22) = CLng(8388607)
m_lOnBits(23) = CLng(16777215)
m_lOnBits(24) = CLng(33554431)
m_lOnBits(25) = CLng(67108863)
m_lOnBits(26) = CLng(134217727)
m_lOnBits(27) = CLng(268435455)
m_lOnBits(28) = CLng(536870911)
m_lOnBits(29) = CLng(1073741823)
m_lOnBits(30) = CLng(2147483647)
m_l2Power(0) = CLng(1)
m_l2Power(1) = CLng(2)
m_l2Power(2) = CLng(4)
m_l2Power(3) = CLng(8)
m_l2Power(4) = CLng(16)
m_l2Power(5) = CLng(32)
m_l2Power(6) = CLng(64)
m_l2Power(7) = CLng(128)
m_l2Power(8) = CLng(256)
m_l2Power(9) = CLng(512)
m_l2Power(10) = CLng(1024)
m_l2Power(11) = CLng(2048)
m_l2Power(12) = CLng(4096)
m_l2Power(13) = CLng(8192)
m_l2Power(14) = CLng(16384)
m_l2Power(15) = CLng(32768)
m_l2Power(16) = CLng(65536)
m_l2Power(17) = CLng(131072)
m_l2Power(18) = CLng(262144)
m_l2Power(19) = CLng(524288)
m_l2Power(20) = CLng(1048576)
m_l2Power(21) = CLng(2097152)
m_l2Power(22) = CLng(4194304)
m_l2Power(23) = CLng(8388608)
m_l2Power(24) = CLng(16777216)
m_l2Power(25) = CLng(33554432)
m_l2Power(26) = CLng(67108864)
m_l2Power(27) = CLng(134217728)
m_l2Power(28) = CLng(268435456)
m_l2Power(29) = CLng(536870912)
m_l2Power(30) = CLng(1073741824)
Dim x
Dim k
Dim AA
Dim BB
Dim CC
Dim DD
Dim a
Dim b
Dim c
Dim d
Const S11 = 7
Const S12 = 12
Const S13 = 17
Const S14 = 22
Const S21 = 5
Const S22 = 9
Const S23 = 14
Const S24 = 20
Const S31 = 4
Const S32 = 11
Const S33 = 16
Const S34 = 23
Const S41 = 6
Const S42 = 10
Const S43 = 15
Const S44 = 21
x = ConvertToWordArray(sMessage)
a = &H67452301
b = &HEFCDAB89
c = &H98BADCFE
d = &H10325476
For k = 0 To UBound(x) Step 16
AA = a
BB = b
CC = c
DD = d
md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478
md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756
md5_FF c, d, a, b, x(k + 2), S13, &H242070DB
md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE
md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF
md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A
md5_FF c, d, a, b, x(k + 6), S13, &HA8304613
md5_FF b, c, d, a, x(k + 7), S14, &HFD469501
md5_FF a, b, c, d, x(k + 8), S11, &H698098D8
md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF
md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1
md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE
md5_FF a, b, c, d, x(k + 12), S11, &H6B901122
md5_FF d, a, b, c, x(k + 13), S12, &HFD987193
md5_FF c, d, a, b, x(k + 14), S13, &HA679438E
md5_FF b, c, d, a, x(k + 15), S14, &H49B40821
md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562
md5_GG d, a, b, c, x(k + 6), S22, &HC040B340
md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51
md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA
md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D
md5_GG d, a, b, c, x(k + 10), S22, &H2441453
md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681
md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8
md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6
md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6
md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87
md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED
md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905
md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8
md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9
md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A
md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942
md5_HH d, a, b, c, x(k + 8), S32, &H8771F681
md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122
md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C
md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44
md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9
md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60
md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70
md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6
md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA
md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085
md5_HH b, c, d, a, x(k + 6), S34, &H4881D05
md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039
md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5
md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8
md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665
md5_II a, b, c, d, x(k + 0), S41, &HF4292244
md5_II d, a, b, c, x(k + 7), S42, &H432AFF97
md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7
md5_II b, c, d, a, x(k + 5), S44, &HFC93A039
md5_II a, b, c, d, x(k + 12), S41, &H655B59C3
md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92
md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D
md5_II b, c, d, a, x(k + 1), S44, &H85845DD1
md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F
md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0
md5_II c, d, a, b, x(k + 6), S43, &HA3014314
md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1
md5_II a, b, c, d, x(k + 4), S41, &HF7537E82
md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235
md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB
md5_II b, c, d, a, x(k + 9), S44, &HEB86D391
a = AddUnsigned(a, AA)
b = AddUnsigned(b, BB)
c = AddUnsigned(c, CC)
d = AddUnsigned(d, DD)
Next
'MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
MD5=LCase(WordToHex(b) & WordToHex(c)) 'I crop this to fit 16byte database password :D
End Function
%>
以上是标准的MD5加密类 参考技术A 1、主要就是调用库函数,MD5加密说到底也是函数计算,没有什么思路的问题,了解md5的发明算法,本质是一个数学问题。
2、例程:
#ifndef
MD5_H
#define
MD5_H
typedef
struct
unsigned
int
count[2];
unsigned
int
state[4];
unsigned
char
buffer[64];
MD5_CTX;
#define
F(x,y,z)
((x
&
y)
|
(~x
&
z))
#define
G(x,y,z)
((x
&
z)
|
(y
&
~z))
#define
H(x,y,z)
(x^y^z)
#define
I(x,y,z)
(y
^
(x
|
~z))
#define
ROTATE_LEFT(x,n)
((x
<<
n)
|
(x
>>
(32-n)))
#define
FF(a,b,c,d,x,s,ac)
\
\
a
+=
F(b,c,d)
+
x
+
ac;
\
a
=
ROTATE_LEFT(a,s);
\
a
+=
b;
\
#define
GG(a,b,c,d,x,s,ac)
\
\
a
+=
G(b,c,d)
+
x
+
ac;
\
a
=
ROTATE_LEFT(a,s);
\
a
+=
b;
\
#define
HH(a,b,c,d,x,s,ac)
\
\
a
+=
H(b,c,d)
+
x
+
ac;
\
a
=
ROTATE_LEFT(a,s);
\
a
+=
b;
\
#define
II(a,b,c,d,x,s,ac)
\
\
a
+=
I(b,c,d)
+
x
+
ac;
\
a
=
ROTATE_LEFT(a,s);
\
a
+=
b;
\
void
MD5Init(MD5_CTX
*context);
void
MD5Update(MD5_CTX
*context,unsigned
char
*input,unsigned
int
inputlen);
void
MD5Final(MD5_CTX
*context,unsigned
char
digest[16]);
void
MD5Transform(unsigned
int
state[4],unsigned
char
block[64]);
void
MD5Encode(unsigned
char
*output,unsigned
int
*input,unsigned
int
len);
void
MD5Decode(unsigned
int
*output,unsigned
char
*input,unsigned
int
len);
#endif
源文件md5.c
#include
<memory.h>
#include
"md5.h"
unsigned
char
PADDING[]=0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;
void
MD5Init(MD5_CTX
*context)
context->count[0]
=
0;
context->count[1]
=
0;
context->state[0]
=
0x67452301;
context->state[1]
=
0xEFCDAB89;
context->state[2]
=
0x98BADCFE;
context->state[3]
=
0x10325476;
void
MD5Update(MD5_CTX
*context,unsigned
char
*input,unsigned
int
inputlen)
unsigned
int
i
=
0,index
=
0,partlen
=
0;
index
=
(context->count[0]
>>
3)
&
0x3F;
partlen
=
64
-
index;
context->count[0]
+=
inputlen
<<
3;
if(context->count[0]
<
(inputlen
<<
3))
context->count[1]++;
context->count[1]
+=
inputlen
>>
29;
if(inputlen
>=
partlen)
memcpy(&context->buffer[index],input,partlen);
MD5Transform(context->state,context->buffer);
for(i
=
partlen;i+64
<=
inputlen;i+=64)
MD5Transform(context->state,&input[i]);
index
=
0;
else
i
=
0;
memcpy(&context->buffer[index],&input[i],inputlen-i);
void
MD5Final(MD5_CTX
*context,unsigned
char
digest[16])
unsigned
int
index
=
0,padlen
=
0;
unsigned
char
bits[8];
index
=
(context->count[0]
>>
3)
&
0x3F;
padlen
=
(index
<
56)?(56-index):(120-index);
MD5Encode(bits,context->count,8);
MD5Update(context,PADDING,padlen);
MD5Update(context,bits,8);
MD5Encode(digest,context->state,16);
void
MD5Encode(unsigned
char
*output,unsigned
int
*input,unsigned
int
len)
unsigned
int
i
=
0,j
=
0;
while(j
<
len)
output[j]
=
input[i]
&
0xFF;
output[j+1]
=
(input[i]
>>
8)
&
0xFF;
output[j+2]
=
(input[i]
>>
16)
&
0xFF;
output[j+3]
=
(input[i]
>>
24)
&
0xFF;
i++;
j+=4;
void
MD5Decode(unsigned
int
*output,unsigned
char
*input,unsigned
int
len)
unsigned
int
i
=
0,j
=
0;
while(j
<
len)
output[i]
=
(input[j])
|
(input[j+1]
<<
8)
|
(input[j+2]
<<
16)
|
(input[j+3]
<<
24);
i++;
j+=4;
void
MD5Transform(unsigned
int
state[4],unsigned
char
block[64])
unsigned
int
a
=
state[0];
unsigned
int
b
=
state[1];
unsigned
int
c
=
state[2];
unsigned
int
d
=
state[3];
unsigned
int
x[64];
MD5Decode(x,block,64);
FF(a,
b,
c,
d,
x[
0],
7,
0xd76aa478);
/*
1
*/
FF(d,
a,
b,
c,
x[
1],
12,
0xe8c7b756);
/*
2
*/
FF(c,
d,
a,
b,
x[
2],
17,
0x242070db);
/*
3
*/
FF(b,
c,
d,
a,
x[
3],
22,
0xc1bdceee);
/*
4
*/
FF(a,
b,
c,
d,
x[
4],
7,
0xf57c0faf);
/*
5
*/
FF(d,
a,
b,
c,
x[
5],
12,
0x4787c62a);
/*
6
*/
FF(c,
d,
a,
b,
x[
6],
17,
0xa8304613);
/*
7
*/
FF(b,
c,
d,
a,
x[
7],
22,
0xfd469501);
/*
8
*/
FF(a,
b,
c,
d,
x[
8],
7,
0x698098d8);
/*
9
*/
FF(d,
a,
b,
c,
x[
9],
12,
0x8b44f7af);
/*
10
*/
FF(c,
d,
a,
b,
x[10],
17,
0xffff5bb1);
/*
11
*/
FF(b,
c,
d,
a,
x[11],
22,
0x895cd7be);
/*
12
*/
FF(a,
b,
c,
d,
x[12],
7,
0x6b901122);
/*
13
*/
FF(d,
a,
b,
c,
x[13],
12,
0xfd987193);
/*
14
*/
FF(c,
d,
a,
b,
x[14],
17,
0xa679438e);
/*
15
*/
FF(b,
c,
d,
a,
x[15],
22,
0x49b40821);
/*
16
*/ 参考技术B 四种加密解密算法的源代码:移位密码、仿射密码、维吉尼亚密码以及置换密码
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
void Shift() /*移位密码*/
char c[100];
int length, i=0, key=0;
clrscr();
printf("********Shift Cipher********\nPlease input primal sentence: ");
gets(c);
length = strlen(c);
printf("Input the key(0~26): ");
scanf("%d", &key);
getchar();
if(key<0)
printf("The value of key is error!\nPress any key to return...");
getch();
return;
for(i=0; i<length; i++)
if(c[i]>96&&c[i]<123)
c[i] = (c[i]+key-97)%26+65;
else if(c[i]>64&&c[i]<91)
c[i] = (c[i]+key-65)%26+65;
printf("Result is: %s\n", c);
for(i=0; i<length; i++)
if(c[i]>64&&c[i]<91)
c[i] = (c[i]-key-65+26)%26+97;
printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
printf("Press any key to return...");
getch();
int gcd(int a, int b) /*辗转相除法求a,b的最大公因数*/
int k = 0;
do
k = a%b;
a = b;
b = k;
while(k!=0);
return a;
int Ni(int a, int b) /*求a相对于b的逆*/
int i = 0;
while(a*(++i)%b!=1);
return i;
void Affine() /*仿射密码*/
char c[100];
int length, i=0, ka=0, kb=0, tmp;
clrscr();
printf("********Affine Cipher********\nPlease input primal sentence: ");
gets(c);
length = strlen(c);
printf("Input the key(2 numbers): ");
scanf("%d%d", &ka, &kb);
getchar();
if(gcd(ka,26)!=1)
printf("The value of the key is error!\nPress any key to return...");
return;
for(i=0; i<length; i++)
if(c[i]>96&&c[i]<123)
c[i] = (ka*(c[i]-97)+kb)%26+65;
else if(c[i]>64&&c[i]<91)
c[i] = (ka*(c[i]-65)+kb)%26+65;
printf("Result is: %s\n", c);
for(i=0; i<length; i++)
if(c[i]>64&&c[i]<91)
tmp = Ni(ka,26)*((c[i]-65)-kb);
if(tmp<0)
c[i] = tmp%26+26+97;
else
c[i] = tmp%26+97;
printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
printf("Press any key to return...");
getch();
void Vigenere() /*维吉利亚密码*/
char c[100], key[100];
int lenc, lenk, i=0, j=0, tmp;
clrscr();
printf("********Vigenere Cipher********\nPlease input primal sentence: ");
gets(c);
lenc = strlen(c);
strcpy(c, strupr(c));
printf("Input the key: ");
gets(key);
lenk = strlen(key);
strcpy(key, strupr(key));
for(; i<lenc; i++)
j = j%lenk;
if(c[i]>64&&c[i]<91)
c[i] = (c[i]-65+key[j]-65)%26+65;
j++;
printf("Result is: %s\n", c);
for(i=0, j=0; i<lenc; i++)
j = j%lenk;
if(c[i]>64&&c[i]<91)
tmp = c[i]-65-(key[j]-65);
if(tmp>=0)
c[i] = tmp%26+97;
else
c[i] = (tmp+26)%26+97;
j++;
printf("\nAfter translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
printf("Press any key to return...");
getch();
void Permutation() /*置换密码*/
char c[100], *q;
int *key, len, m, i, j=0;
clrscr();
printf("********Permutation Cipher********\nPlease input primal sentence: ");
gets(c);
strcpy(c, strupr(c));
len = strlen(c);
for(i=0; i<len; i++)
if(c[i]<65||c[i]>90)
for(j=i; j<len-1; j++)
c[j] = c[j+1];
len--;
c[len] = '\0';
printf("Input the length of the key: ");
scanf("%d", &m);
key = (int)malloc(m*sizeof(int));
q = (int)malloc(len*sizeof(int));
printf("Input the key: ");
for(i=0; i<m; i++)
scanf("%d", key+i);
key[i]--;
getchar();
for(i=0; i<len; i++)
j = (i/m)*m;
q[i] = c[*(key+i%m)+j];
q[i] = '\0';
printf("Result is: %s\n", q);
for(i=0, j=0; i<len; i++)
j = (i/m)*m;
c[*(key+i%m)+j] = q[i]+32;
c[len] = '\0';
printf("After translated the sentence,we can see the primal sentence as follow:\n%s\n", c);
printf("Press any key to return...");
free(key);
free(q);
getch();
void main()
char i = '0';
clrscr();
while(i!='5')
clrscr();
printf("********Press 1~5 to choose:********\n");
printf("1. Shift Cipher\n2. Affine Cipher\n3. Vigenere Cipher\n4. Permutation Cipher\n5. Exit\n");
i = getch();
if(i=='1')
Shift();
else if(i=='2')
Affine();
else if(i=='3')
Vigenere();
else if(i=='4')
Permutation();
else if(i=='5')
break;
参考技术C 一直用内嵌函数md5()
或者http://www.delphibbs.com/keylife/iblog_show.asp?xid=16368
刚才看了看。晕了本回答被提问者采纳
matlab常用函数名``谁给我个啊``谢谢`
这个软件功能很强大,数学建模的时候可以用到它1、特殊变量与常数
ans 计算结果的变量名
computer 确定运行的计算机
eps 浮点相对精度
Inf 无穷大
I 虚数单位
inputname 输入参数名
NaN 非数
nargin 输入参数个数
nargout 输出参数的数目
pi 圆周率
nargoutchk 有效的输出参数数目
realmax 最大正浮点数
realmin 最小正浮点数
varargin 实际输入 的参量
varargout 实际返回的参量
操作符与特殊字符
+ 加 - 减
* 矩阵乘法 .* 数组乘(对应元素相乘)
^ 矩阵幂 .^ 数组幂(各个元素求幂)
\\ 左除或反斜杠 / 右除或斜面杠
./ 数组除(对应元素除)
kron Kronecker张量积
: 冒号 () 圆括
[] 方括 . 小数点
.. 父目录 ... 继续
, 逗号(分割多条命令) ; 分号(禁止结果显示)
% 注释 ! 感叹号
\' 转置或引用 = 赋值
== 相等 <> 不等于
& 逻辑与 | 逻辑或
~ 逻辑非 xor 逻辑异或
2、基本数学函数
abs 绝对值和复数模长
acos,acodh 反余弦,反双曲余弦
acot,acoth 反余切,反双曲余切
acsc,acsch 反余割,反双曲余割
angle 相角
asec,asech 反正割,反双曲正割
secant 正切
asin,asinh 反正弦,反双曲正弦
atan,atanh 反正切,双曲正切
tangent 正切
atan2 四象限反正切
ceil 向着无穷大舍入
complex 建立一个复数
conj 复数配对
cos,cosh 余弦,双曲余弦
csc,csch 余切,双曲余切
cot,coth 余切,双曲余切
exp 指数
fix 朝0方向取整
floor 朝负无穷取整
gcd 最大公因数
imag 复数值的虚部
lcm 最小公倍数
log 自然对数
log2 以2为底的对数
log10 常用对数
mod 有符号的求余
nchoosek 二项式系数和全部组合数
real 复数的实部
rem 相除后求余
round 取整为最近的整数
sec,sech 正割,双曲正割
sign 符号数
sin,sinh 正弦,双曲正弦
sqrt 平方根
tan,tanh 正切,双曲正切
3、基本矩阵和矩阵操作
blkding 从输入参量建立块对角矩阵
eye 单位矩阵
linespace 产生线性间隔的向量
logspace 产生对数间隔的向量
numel 元素个数
ones 产生全为1的数组
rand 均匀颁随机数和数组
randn 正态分布随机数和数组
zeros 建立一个全0矩阵 colon) 等间隔向量
cat 连接数组
diag 对角矩阵和矩阵对角线
fliplr 从左自右翻转矩阵
flipud 从上到下翻转矩阵
repmat 复制一个数组
reshape 改造矩阵
roy90 矩阵翻转90度
tril 矩阵的下三角
triu 矩阵的上三角
dot 向量点集
cross 向量叉集
ismember 检测一个集合的元素
intersect 向量的交集
setxor 向量异或集
setdiff 向是的差集
union 向量的并集
数值分析和傅立叶变换
cumprod 累积
cumsum 累加
cumtrapz 累计梯形法计算数值微分
factor 质因子
inpolygon 删除多边形区域内的点
max 最大值
mean 数组的均值
mediam 中值
min 最小值
perms 所有可能的转换
polyarea 多边形区域
primes 生成质数列表
prod 数组元素的乘积
rectint 矩形交集区域
sort 按升序排列矩阵元素
sortrows 按升序排列行
std 标准偏差
sum 求和
trapz 梯形数值积分
var 方差
del2 离散拉普拉斯
diff 差值和微分估计
gradient 数值梯度
cov 协方差矩阵
corrcoef 相关系数
conv2 二维卷积
conv 卷积和多项式乘法
filter IIR或FIR滤波器
deconv 反卷积和多项式除法
filter2 二维数字滤波器
cplxpair 将复数值分类为共轭对
fft 一维的快速傅立叶变换
fft2 二维快速傅立叶变换
fftshift 将FFT的DC分量移到频谱中心
ifft 一维快速反傅立叶变换
ifft2 二维傅立叶反变换
ifftn 多维快速傅立叶变换
ifftshift 反FFT偏移
nextpow2 最靠近的2的幂次
unwrap 校正相位角
多项式与插值
conv 卷积和多项式乘法
roots 多项式的根
poly 具有设定根的多项式
polyder 多项式微分
polyeig 多项式的特征根
polyfit 多项式拟合
polyint 解析多项式积分
polyval 多项式求值
polyvalm 矩阵变量多项式求值
residue 部分分式展开
interp1 一维插值
interp2 二维插值
interp3 三维插值
interpft 使用FFT的一维插值
interpn 多维插值
meshgrid 为3维点生成x和y的网格
ndgrid 生成多维函数和插值的数组
pchip 分段3次Hermite插值多项式
ppval 分段多项式的值
spline 3次样条数据插值
绘图函数
bar 竖直条图
barh 水平条图
hist 直方图
histc 直方图计数
hold 保持当前图形
loglog x,y对数坐标图
pie 饼状图
plot 绘二维图
polar 极坐标图
semilogy y轴对数坐标图
semilogx x轴对数坐标
subplot 绘制子图
bar3 数值3D竖条图
bar3h 水平3D条形图
comet3 3D慧星图
cylinder 圆柱体
fill3 填充的3D多边形
plot3 3维空间绘图
quiver3 3D震动(速度)图
slice 体积薄片图
sphere 球
stem3 绘制离散表面数据
waterfall 绘制瀑布
trisurf 三角表面
clabel 增加轮廓标签到等高线图中
datetick 数据格式标记
grid 加网格线
gtext 用鼠标将文本放在2D图中
legend 图注
plotyy 左右边都绘Y轴
title 标题
xlabel X轴标签
ylabel Y轴标签
zlabel Z轴标签
contour 等高线图
contourc 等高线计算
contourf 填充的等高线图
hidden 网格线消影
meshc 连接网格/等高线
mesh 具有参考轴的3D网格
peaks 具有两个变量的采样函数
surf 3D阴影表面图
surface 建立表面低层对象
surfc 海浪和等高线的结合
surfl 具有光照的3D阴影表面
trimesh 三角网格图 参考技术A 下面那个是常用数学函数:
http://cs.nju.edu.cn/yangxc/dcc2003.files/matlab/matlab/3_3.htm
以上是关于谁给我个md5等加密算法c++的现成类的主要内容,如果未能解决你的问题,请参考以下文章