1 Intro

计算机技术中的密码学

2 Symmetric Cryptographic Algorithm 对称加密算法

2.1 AES

AES 是非常广泛地使用的对称加密算法。常见的有AES256算法。

AES

2.1.1 AES Parameters

在AES的各种演变的算法中,都会涉及到盐度(salt),初始向量(iv),这两个参数解密也同样需要,同时要保证一样才可以正常解密。

在实际应用中,salt和iv都会组装在加密内容中,比如encrypted bytes = iv bytes + salt bytes + encrypted message bytes,然后通过base64 encode成可以展示的string,解密方在获取到密文和密钥后,可以先通过Base64 decode 然后拆解bytes,进而获得iv,salt 和 密文,之后正常解密得到明文。 所以,实际使用时,加密方需要告知解密方:

  • 密文
  • 密钥
  • salt 和 iv 的字节长度 这样解密方才可以正常解密内容。

参考:(Java AES Encryption and Decryption - baeldung)[https://www.baeldung.com/java-aes-encryption-decryption]

2.2 DES

2.3 SM4

在国内营业的金融机构为了合规,需要支持使用国内认可的对称加密算法,其中SM4就是典型的国密对称加密算法。

3 Asymmetric Cryptographic Algorithm 非对称加密算法

3.1 RSA

RSA 是非常经典的非对称加密算法,和对称加密算法不一样的是,他有两个key(密钥),其中公钥是用来加密数据的,私钥是用来解密数据的。

Github: https://github.com/mooselau/springboot-tiny/tree/master/gooseonroad/purejava/src/main/java/crypto

参考:RSA in Java - baeldung

3.1.1 RSA KeyPair

公私钥在密码中常称为KeyPair,如何自主生成一对公私钥呢?

Step 1 Generate Private Key 先生成2048位的私钥:

$ openssl genrsa -out private_key.pem 2048

Step 2 Convert to PKCS#8 (DER Format) 为了让Java可以读取这个Key,这里采用DER格式,进行一次转换:

$ openssl pkcs8 -topk8 -inform PEM -outform DER -in private_key.pem -out private_key.der -nocrypt

Step 3 Output Public Key in DER Format 同样,为了让Java可以读取这个Key,采用DER格式,从PEM私钥中导出来:

$ openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der

至此,我们就有了DER格式的公私钥文件了。

3.2 SM2

由于金融机构在国内运营需要遵循使用国密算法,国家认可的密码算法,其中SM2 就是典型的非对称算法之一。

4 Digest Algorithms 摘要算法

SHA256, MD5, Hashing.. SM3 是典型的国密算法中的Digest算法。

results matching ""

    No results matching ""