关于非对称的加密算法,有RSA算法,国产的SM2算法,据博主了解的有关资料,SM2加密算法相比于传统的RSA加密算法,在保证安全的前提下,有着更高的性能。
SM2是一种密码学算法,是由中国国家密码管理局于2010年发布的一种椭圆曲线公钥密码算法。它被用作数字签名、密钥交换和加密等安全通信领域。SM2算法采用了基于椭圆曲线离散对数问题的数学原理,提供了一种安全高效的密码学解决方案
主要特点包括:
安全性: 基于圆曲线离散对数问题,这被认为是一个难解的数学难题,提供了较高的安全性.2.性能高效:相较于传统的RSA算法,SM2在保证安全性的前提下,具有更高的性能,特别是在移动设备等资源有限的环境中3.国密标准:SM2是中国国家密码管理局发布的国家标准,适用于中国政府和企业的安全通信需求。
SM2算法涵盖了加密、签名和密钥交换三种功能。在实际应用中,它可以用于安全通信、数字签名、电子认证、数据加密等场景。例如,用于保护金融交易、电子身份认证、电子邮件加密等需要安全性的场景。
需要指出的是,SM2作为一种特定国家的标准,其广泛应用可能受到特定法律、政策和标准的限制,不同国家可能有自己的加密标准和规范。因此,在选择使用加密算法时,需要考虑符合当地法律法规和标准的合规性。
以上对SM2做了一个简单的介绍,接下来开始讲讲它是如何在实际中使用的。
大致思路:博主是选择了公钥进行加密,私钥进行解密。至于加密就是让前端开发人员去进行用SM2实现密码的加密操作,解密则是后端开发人员去实现。
后端工作:根据SM2生成一对密钥对(公钥与私钥),将公钥利用接口传输给前端,前端根据这个公钥使用SM2算法对用户的密码进行加密,这样在传输的过程中就可以以密文的形式传输给服务器,后端服务拿着这个密文根据生成的私钥进行解密操作,将密文解密为明文(这个明文与用户在登录界面输入的密码是一样的),然后再去进行密码的校验登录操作。
@Bean
public SM2KeyPair generateKeyPair(){
SM2 sm2 = SM2.Instance();
AsymmetricCipherKeyPair key = sm2.ecc_key_pair_generator.generateKeyPair();
ECPrivateKeyParameters ecpriv = (ECPrivateKeyParameters) key.getPrivate();
ECPublicKeyParameters ecpub = (ECPublicKeyParameters) key.getPublic();
BigInteger privateKey = ecpriv.getD();
ECPoint publicKey = ecpub.getQ();
SM2KeyPair sm2KeyPair = new SM2KeyPair(Util.byteToHex(publicKey.getEncoded(false)), Util.byteToHex(privateKey.toByteArray()));
return new SM2KeyPair(Util.byteToHex(publicKey.getEncoded(false)),Util.byteToHex(privateKey.toByteArray()));
}