day3.简单的密码学相关算法

day3:简单密码相关算法

一)HEX编码

A 工具idea,创建Java工程

执行结果:

借助HexBin库函数,进去看其具体实现

lookUpHexAlphabet是码表;

将encode算法实现移到Java里,编码结果一致

如果改变了码表,则编码结果也都会变

B Android studio 真机pixel

创建工程后,在app下的build.gradle文件里添加okhttp3依赖

借助okhttp3中的bytestring中自带的hex编码实现。

二)Base64 编码

每个Base64字符代表原数据中的6bit

Base64编码后的字符数,是4的倍数

编码的字节数是3的倍数时,不需要填充

三)消息摘要算法

算法特点

a) 消息摘要算法/单向散列函数/哈希函数

b) 不同长度的输入,产生固定长度的输出

c) 散列后的密文不可逆

d) 散列后的结果唯一

e) 哈希碰撞

f) 一般用于校验数据完整性、签名sign

A.MD5

借助MessageDigest引擎类,创建md5算法,再用update压入数据(加盐),可分多次,最后digest进行加密,可通过reset重置。还可将md5加密结果进行hex/base64编码。

碰到加salt的MD5,可以直接输入空的值,得到结果去CMD5查询一下,有可能就得到salt。

B.MAC

借用SecretKeySpec 去创建算法,再初始化hmac算法,再dofinal加密

C.DES

有ECB与CBC模式之分,cbc模式才可以加iv。

没有指明加密模式和填充方式,表示使用默认的DES/ECB/PKCS5Padding

没有指明加密模式和填充方式,表示使用默认的DES/ECB/PKCS5Padding

D.DESede

没有指明加密模式和填充方式,表示使用默认的DESede/ECB/PKCS5Padding

若密钥不足24位,会报错。

同样存在CBC,ECB模式之分

四)非对称加密算法

A.RSA

需要生成一个密钥对,包含公钥和私钥,密钥不是随便写的

密钥对生成 在线生成非对称加密公钥私钥对、在线生成公私钥对、RSA Key pair create、生成RSA密钥对--查错网

公钥加密的数据,私钥才能解密

 私钥加密的数据,公钥才能解密

一般公钥是公开的,私钥保密,私钥包含公钥,从公钥无法推导出私钥

加密处理安全,但是性能极差,单次加密长度有限制

RSA算法既可用于加密解密,也可用于数据签名(此时,一般用私钥加密,证明身份)

私钥的格式

pkcs1格式通常开头是 -----BEGIN RSA PRIVATE KEY-----

pkcs8格式通常开头是 -----BEGIN PRIVATE KEY-----

Java中的私钥必须是pkcs8格式

RSA模式和填充细节

a) None模式与ECB模式是一致的

b) NoPadding

 明文最多字节数为密钥字节数(RSA-1024,明文最多可一次加密128个字节)

 密文与密钥等长

 填充字节0, 加密后的密文不变

c) pkcs1padding

 明文最大字节数为密钥字节数-11(eg:RSA-1024,密钥1024位,即128字节,明文最多可以一次性加密的字节数就是117,再多就报错)

 密文与密钥等长

 每一次的填充不一样,使得加密后的密文会变

a)RSA_Base64(直接使用base64形式的密钥)

创建并初始化 公钥和私钥。

公钥加密函数

私钥加密函数

结果

D/RSA_Base64E: t+Tx/99MZotxUaThPSmo+QSRWAwd19VFF0vmNFpqtRymrwWwDSOZ41wIFWUpuOWIhIWRphV1cjgNrj7WENr4dCGkrOg3mMX7HKafn6vs7ya4e31Q/RpPCaIxljraEgA8DFE8GlNDo0HTBFjhGeQUUwbPBLQi3gmUEVuliLqHAQg=||b7e4f1ffdf4c668b7151a4e13d29a8f90491580c1dd7d545174be6345a6ab51ca6af05b00d2399e35c08156529b8e588848591a6157572380dae3ed610daf87421a4ace83798c5fb1ca69f9fabecef26b87b7d50fd1a4f09a231963ada12003c0c513c1a5343a341d30458e119e4145306cf04b422de0994115ba588ba870108

D/RSA_Base64D: MistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistMistM

 没有指明加密模式和填充方式,表示使用默认的RSA/ECB/NOPadding

b)RSA_Hex

(有些情况加给出的密钥没有转换,就是hex编码的,但又不能单纯通过from hex 再to base64)

从网站找一组密钥,

很明显可以发现,私钥里面是包含公钥的,moudle取256个字符,public Exponent取010001,privateExponent取0281800后的255个字符

加密结果:

D/RSA_HexE: IQSmZslfSIH3z/Lyp9GEq6kixm074VIM9kWlsjZNr4FuoLSDepu7in3uoPF/E2vLWSn1UQDNgNgpsPR+MQX4hKEDIuvnb4gB7O6Z/RYX3DUav1pQAumQGs54jwlmXFFrDx25SLUHGvXVf408qm6XogkL78DxWAGx9D0l6nIdiAw=||2104a666c95f4881f7cff2f2a7d184aba922c66d3be1520cf645a5b2364daf816ea0b4837a9bbb8a7deea0f17f136bcb5929f55100cd80d829b0f47e3105f884a10322ebe76f8801ecee99fd1617dc351abf5a5002e9901ace788f09665c516b0f1db948b5071af5d57f8d3caa6e97a2090befc0f15801b1f43d25ea721d880c
D/RSA_HexD: Mist12345678

五,数字签名

第一个函数是签名,第二个函数是用于验证,以下是修改了RSA_Base64的一些地方

结果:使用私钥加密Mist123,使用公钥加密明文,比对两个加密结果,若一致,则verify为真,否则为假。

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值