加密方式有几种?

加密方式有几种?,第1张

加密方式的种类:

1、MD5

一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。

2、对称加密

对称加密采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。

3、非对称加密

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。

如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

扩展资料

非对称加密工作过程

1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。

2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。

3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。

同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

看你催就仓促写了个,自我感觉写的不是很好,但是能用了。数据只能是大写字母组成的字符串。

加密的时候,输入Y,然后输入要加密的文本(大写字母)

解密的时候,输入N,然后输入一个整数n表示密文的个数,然后n个整数表示加密时候得到的密文。

/*RSA algorithm */

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define MM 7081

#define KK 1789

#define PHIM 6912

#define PP 85

typedef char strtype[10000]

int len

long nume[10000]

int change[126]

char antichange[37]

void initialize()

{ int i

char c

for (i = 11, c = 'A'c <= 'Z'c ++, i ++)

{ change[c] = i

antichange[i] = c

}

}

void changetonum(strtype str)

{ int l = strlen(str), i

len = 0

memset(nume, 0, sizeof(nume))

for (i = 0i <li ++)

{ nume[len] = nume[len] * 100 + change[str[i]]

if (i % 2 == 1) len ++

}

if (i % 2 != 0) len ++

}

long binamod(long numb, long k)

{ if (k == 0) return 1

long curr = binamod (numb, k / 2)

if (k % 2 == 0)

return curr * curr % MM

else return (curr * curr) % MM * numb % MM

}

long encode(long numb)

{ return binamod(numb, KK)

}

long decode(long numb)

{ return binamod(numb, PP)

}

main()

{ strtype str

int i, a1, a2

long curr

initialize()

puts("Input 'Y' if encoding, otherwise input 'N':")

gets(str)

if (str[0] == 'Y')

{ gets(str)

changetonum(str)

printf("encoded: ")

for (i = 0i <leni ++)

{ if (i) putchar('-')

printf(" %ld ", encode(nume[i]))

}

putchar('\n')

}

else

{ scanf("%d", &len)

for (i = 0i <leni ++)

{ scanf("%ld", &curr)

curr = decode(curr)

a1 = curr / 100

a2 = curr % 100

printf("decoded: ")

if (a1 != 0) putchar(antichange[a1])

if (a2 != 0) putchar(antichange[a2])

}

putchar('\n')

}

putchar('\n')

system("PAUSE")

return 0

}

测试:

输入:

Y

FERMAT

输出:

encoded: 5192 - 2604 - 4222

输入

N

3 5192 2604 4222

输出

decoded: FERMAT


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7709682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存