rsa验签中文_RSA与数字签名

RSA

加密与数字签名

主要应用就是

signature

cipher

什么是数字签名?

我们假定传输的过程都是不安全的,

数字签名就是对内容进行签名。

这个签名的原理是,

要签名的内容

(比如是一张大图片,

一部电影)

通过不同签名算法

(

hash SA1

MD5

MD160

等)得出一个

hashM

,比如这个

hashM

为二十字节。然后就是对这二十字节进行操作,得

出一个定长的

Em

。这个

Em

就是我们

RSA

加密所用的明文

M

操作过程大致为开头加

0x00

后面加上

0x02

或者

0x01

(

01

02

有区别)然后是一堆的

padding

padding

一般用

0xFF

结束,然后跟上

hashID

,之后再加上

hashM

。这样组成一个

可以用于

RSA

加密的明文长度,我们称之为

Em

,也就是加密所用的明文

M

。也就是说无

hashM

是多长(各种算法,

hashM

可能不是一样长)

,但是

Em

肯定是定长的。这个时候

通过

RSA

算法

C = M

e

mod N

。这时候

C

就是签名,称之为

signature

veryfire

就是把

C

还原成

M

(

C

>M

)

这时候的

M

就是签名中的

Em

别人使用相同的方法

(

hash SA1

MD5

MD160

等)把我们传输的内容(比如一张大图片,一部电影)计算得出一个

hashM

。这个

hashM

和解密出来的

hashM

进行比较,一致就说明传输没有被修改。其实这个和我们平时

在某个文件上进行签名的原理是一样的,

就是一个加记号,

别人看见这个记号的时候就知道,

哦,这就是你签的那个文件(他认识你的笔迹就像我们使用

RSA

算法一样)

RSA

加密原理(

C=M

e

mod N

)

C

我们认为是密文,

M

我们认为是明文(就是一串大数字,任何文件在计算机存储都是数

字)

mod

就是取余数,

(

e

N

)就是公钥。

e

(尽可能的时素数)可能是

2,3

或者常用的

F4

(

010001=65537

)

密钥对(

keypair

)

,一个完整的密钥是一对,分为公钥和私钥。公钥(

e

N

)

,私钥(

d

N

)

我们常说的

1024bit

2048bit

加密就是指这里

N

的长度。

Ln=Ld>=Le

(长度)

比如

2048bit

的加密则

N

d

都是

2048bit

N

就是两个大素数的乘积,

N = p*q

(

p

q

就是这对大素数)

Lc=La+Lb

或者

Lc=La+Lb-1(

任何的进制的数据都是这样的

)

这样我们想生成一个

2048bit

N

,则

p

q

都可以是

128bit

的素数,当然

p

q

可以不一样长,但是

p

q

应该尽量保持

同样的长度,以提高加密的可靠性和安全性。

对于密钥对而言,我们认为谁拥有私钥,

是就

是密钥对的产生者。

CRT

五元组(

p

q

dp

dq

q

INV

)五元组计算公式

Mp = C

dp

mod p

Mq = C

dq

mod q

M = ((( Mp

Mq)*q

INV

) mod p)*q + Mq

五元组就是提高效率,他其实就是解密的一个步骤,就是相当于把私钥

d

分解了,这个

d

的分解就是解密中的步骤。所以五元组大多是用于解密。这也是他为什么快的原因。

Javacard API

RSA

加密可以分为几个步骤。

Init

updata

dofinal

Init

就是密钥的初始化,明文,密文的传送。

Dofinal

计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值