| 程序包 | 说明 |
|---|---|
| cn.ponfee.commons.jce |
Java Cryptography Extension提供用于加密、密钥生成和协商
以及 Message Authentication Code(MAC)算法的实现
http://www.freebuf.com/articles/others-articles/136742.html
https://www.jianshu.com/p/b10a892879a0
1、密码:
你知道什么:口令(密码)、口令摘要、质询/响应
你有什么:认证令牌(质询/响应令牌、时间令牌),PIN双因素认证、SSL与认证令牌、智能卡
你是什么:生物特征认证,FAR(False Accept Ratio),FRR(False Reject Ratio)
2、对称加密:
优点:效率高
缺点:密钥成几何数增长、需要事先协商密钥
类型:分组密码(DES、3DES、AES),序列密码(RC4)、盐加密(PBE)
分组模式:ECB、CBC、OFB、CFB
填充:NoPadding, PKCS5Padding, PKCS7Padding, PADDING_ISO10126
AES要支持256位密钥:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
解压后替换jre/lib/security/目录下的jar文件即可
3、非对称加密:
优点:密钥分发安全,公开公钥即可
缺点:效率低
算法:
DH:基于离散对数的实现,主要用于密钥交换
RSA:基于大整数因式分解的实现,Ron [R]ivest, Adi [S]hamir, Leonard [A]dleman(三人)
https://www.kancloud.cn/kancloud/rsa_algorithm/48488
DSA:基于整数有限域离散对数难题(特点是两个素数公开),Digital Signature Algorithm,顾名思义只用于数字签名
ECC:基于椭圆曲线算法,指在取代RSA
填充:RSA_PKCS1_PADDING(blocklen=keysize/8–11)、RSA_PKCS1_OAEP_PADDING(keysize-41)、RSA_NO_PADDING
签名/验签:PKCS1及填充、PKCS7格式(附原文|不附原文)
PKCS: Public-Key Cryptography Standards
PKI: Public-Key Infrastructure
4、对称与非对称结合:数字信封envelop,结构体,(带签名|不带签名)
5、数字证书:ASN1、X509、p7b、p7r、p10、p12、PEM、DER等概念
6、BASE64编码:3个字节切分为4个字节后每字节最高位补00 0 ~ 63, “=”,并与编码表对照
前生:解决邮件只能发ASCII码问题
应用:二进制字节流数据文本化(某些场景的网络传输及文本表示)
7、哈希算法:指纹、摘要,用于防篡改等
MD5:前身MD2、MD3和MD4,安全性低,算法原理(填充、记录长度、数据处理)
SHA-1:已被严重质疑
SHA-2:SHA-224、SHA-256、SHA-384、SHA-512,算法跟SHA-1基本上仍然相似
SHA-3:之前名为Keccak算法,是一个加密杂凑算法
RIPEMD-160:哈希加密算法,用于替代128位哈希函数 MD4、MD5 和 RIPEMD
8、密码安全:BCrypt、SCrypt、PBKDF2, Argon2
9、时间戳、签章
10、区块链:
https://anders.com/blockchain,https://www.zhihu.com/question/22075219
SHA256:
block_header = version + previous_block_hash + merkle_root + time + target_bits + nonce
for i in range(0, 2^32):
if sha256(sha256(block_header)) < target_bits:
break
else:
continue
version:block的版本(静态常数)
previous_block_hash:上一个block的hash值(前一区块已经是打包好的)
merkle_root:需要写入的交易记录的hash树的值(根据本次交易包含的交易列表得到)
time:更新时间(utc时间:取打包时的时间,也不需要很精确,前后几十秒也都可以)
target_bits:当前难度
nonce:从0试到最大值2^32
target_bits:TARGET_MAX/difficulty,创世区块时的difficulty=1
TARGET_MAX=0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
https://www.liaoxuefeng.com/article/1124144362997184
┌─────────────────────────────────────────────┐
│Tx: abcd...1234 │
├─────────────────────┬───────────────────────┤
│ TxIn │ TxOut │
├─────────────┬───────┼──────┬────────────────┤
│prev hash │index │btc │pkScript │
├─────────────┼───────┼──────┼────────────────┤
│2016...a3c5 │3 │0.15 │OP_DUP a1b2... │<─┐
├─────────────┼───────┼──────┼────────────────┤ │
│2015...b6d8 │1 │0.08 │OP_DUP c3d4
|
| cn.ponfee.commons.jce.symmetric |
| 类和说明 |
|---|
| SymmetricCryptor
AES
http://blog.csdn.net/qq_28205153/article/details/55798628
http://blog.csdn.net/lrwwll/article/details/78069013
https://coolshell.cn//wp-content/uploads/2010/10/rijndael_ingles2004.swf
对称加密
加密:C = E(K, P)
解密:P = D(K, C)
AES 密钥长度(32位比特字) 分组长度(32位比特字) 加密轮数
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14
1、明文按16字节(4个32位比特字)分组,P[0],P[1],...
|
| 类和说明 |
|---|
| Algorithm
对称密钥算法bit(位)
DES key size must be equal to 64
DESede(TripleDES) key size must be equal to 112 or 168
AES key size must be equal to 128, 192 or 256, but 192 and 256 bits may be unsupport
Blowfish key size must be multiple of 8, and can only range from 32 to 448 (inclusive)
RC2 key size must be between 40 and 1024 bits(block cipher, 曾经被考虑作为DES算法的替代品, 比DES快)
RC4(ARCFOUR) key size must be between 40 and 1024 bits(stream cipher)
AES进入最后一轮候选算法有:Rijndael/Serpent/Twofish/RC6/MARS,最终Rijndael算法获胜
速度排名:IDEA < DES < GASTI28 < GOST < AES < RC4 < TEA < Blowfish
1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
3、RC2和RC4:对称算法,用变长密钥对大量数据进行加密,比 DES快;
4、IDEA(International Data Encryption Algorithm)国际数据加密算法,使用128位密钥提供非常强的安全性;
5、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法;
6、DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;
7、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES标准的一个实现是Rijndael算法;
8、BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
10、PKCS:The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,
其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。
|
| Mode
对称加密分组模式
推荐使用CBC和CTR模式
CFB,OFB,CTR模式不需要padding
ECB:最基本的加密模式,也就是通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用。
|
| Padding
encrypt padding
pkcs7Padding must be has BouncyCastleProvider support
PKCS7Padding:缺几个字节就补几个字节的0
PKCS5Padding:缺几个字节就补充几个字节的几,如缺6个字节就补充6个字节的6
|
| PBECryptor
|---------------------------------------|-------------------|---------------------------|
| Algorithm | secret key length | default secret key length |
|---------------------------------------|-------------------|---------------------------|
| PBEWithMD5AndDES | 56 | 56 |
|---------------------------------------|-------------------|---------------------------|
| PBEWithMD5AndTripleDES | 112,168 | 168 |
|---------------------------------------|-------------------|---------------------------|
| PBEWithSHA1AndDESede | 112,168 | 168 |
|---------------------------------------|-------------------|---------------------------|
| PBEWithSHA1AndRC2_40 | 40 to 1024 | 128 |
|---------------------------------------|-------------------|---------------------------|
String是常量(即创建之后就无法更改),会保存到常量池中,如果有其他进程
可以dump这个进程的内存,那么密码就会随着常量池被dump出去从而泄露。
|
| PBECryptor.PBEAlgorithm |
| PBECryptorBuilder
PBE Cryptor builder
|
| SymmetricCryptor
AES
http://blog.csdn.net/qq_28205153/article/details/55798628
http://blog.csdn.net/lrwwll/article/details/78069013
https://coolshell.cn//wp-content/uploads/2010/10/rijndael_ingles2004.swf
对称加密
加密:C = E(K, P)
解密:P = D(K, C)
AES 密钥长度(32位比特字) 分组长度(32位比特字) 加密轮数
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14
1、明文按16字节(4个32位比特字)分组,P[0],P[1],...
|
| SymmetricCryptorBuilder
对称加密构建类
|
Copyright © 2023. All rights reserved.