怎样做网站的当前位置栏关于建设网站的报告书
news/
2025/9/28 5:17:06/
文章来源:
怎样做网站的当前位置栏,关于建设网站的报告书,西宁做网站_君博先进,做图素材网站哪个好Java加密的常用的加密算法类型有三种
1单向加密#xff1a;
也就是不可逆的加密#xff0c;例如MD5,SHA,HMAC
2对称加密#xff1a;
也就是加密方和解密方利用同一个秘钥对数据进行加密和解密#xff0c;例如DES#xff0c;PBE等等
3非对称加密#xff1a;
非对称加…Java加密的常用的加密算法类型有三种
1单向加密
也就是不可逆的加密例如MD5,SHA,HMAC
2对称加密
也就是加密方和解密方利用同一个秘钥对数据进行加密和解密例如DESPBE等等
3非对称加密
非对称加密分为公钥和秘钥二者是非对称的例如用私钥加密的内容需要使用公钥来解密使用公钥加密的内容需要用私钥来解密DSARSA…
而keyGenerator,KeyPairGenerator,SecretKeyFactory的三种使用方法刚好和这三种加密算法类型对上
keyGenerator
秘钥生成器也就是更具算法类型随机生成一个秘钥例如HMAC所以这个大部分用在非可逆的算法中。
SecretKeyFactory
秘密秘钥工厂言外之意就是需要根据一个秘密password去生成一个秘钥,例如DESPBE所以大部分使用在对称加密中。
KeyPairGenerator:
秘钥对生成器也就是可以生成一对秘钥也就是公钥和私钥所以大部分使用在非对称加密中。 下面主要介绍一下KeyPairGenerator
KeyPairGenerator类
KeyPairGenerator 类用于生成公钥和私钥对。密钥对生成器是使用 getInstance 工厂方法返回一个给定类的实例的静态方法构造的。
特定算法的密钥对生成器可以创建能够与此算法一起使用的公钥/私钥对。它还可以将特定于算法的参数与每个生成的密钥关联。
有两种生成密钥对的方式与算法无关的方式和特定于算法的方式。两种方式的唯一区别在于对象的初始化
与算法无关的初始化 所有的密钥对生成器遵循密钥大小和随机源的概念。对于不同的算法密钥大小的解释也不相同例如对于 DSA 算法密钥大小对应于模的长度。此 KeyPairGenerator 类有一个 initialize 方法该方法带有两个通用的共享类型的参数。还有一个只带有 keysize 参数的方法它使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。如果任何安装的提供者都不提供 SecureRandom 的实现则使用系统提供的随机源。
因为调用上述与算法无关的 initialize 方法时没有指定其他参数所以由提供者决定如何处理与每个密钥关联的特定于算法的参数如果有。
如果算法为 DSA 算法密钥大小模大小为 512、768 或 1024那么 Sun 提供者对 p、q 和 g 参数使用一组预计算值。如果模大小不是上述值之一则 Sun 提供者创建一个新的参数集合。其他提供者可能具有供更多模大小不仅仅是上文提及的那三个使用的预计算参数集合。其他提供者也可能没有任何预计算参数列表而总是创建新的参数集合。
特定于算法的初始化 对于特定于算法的参数集合已存在的情况例如DSA 中所谓的公用参数有两个 initialize 方法具有 AlgorithmParameterSpec 参数。其中一个方法还有一个 SecureRandom 参数而另一个方法使用以最高优先级安装的提供者的 SecureRandom 实现作为随机源。如果任何安装的提供者都不提供 SecureRandom 的实现则使用系统提供的随机源。
每个提供者都必须提供并记录默认的初始化以防客户端没有显式初始化 KeyPairGenerator通过调用 initialize 方法。例如Sun 提供者使用 1024 位的默认模大小密钥大小。
注意由于历史原因此类是抽象类是从 KeyPairGeneratorSpi 扩展的。应用程序开发人员只需注意在此 KeyPairGenerator 类中定义的方法超类中的所有方法是供加密服务提供者使用的这些加密服务提供者希望提供自己的密钥对生成器实现。 Java提供的KeyPairGenerator类。 用于生成公钥和私钥对。 要使用KeyPairGenerator类生成密钥按照以下步骤操作。
第1步创建KeyPairGenerator对象
KeyPairGenerator类提供getInstance()方法该方法接受表示所需密钥生成算法的String变量并返回生成密钥的KeyPairGenerator对象。
使用getInstance()方法创建KeyPairGenerator对象如下所示。
//Creating KeyPair generator object
KeyPairGenerator keyPairGen KeyPairGenerator.getInstance(DSA);第2步初始化KeyPairGenerator对象
KeyPairGenerator类提供了一个名为initialize()的方法该方法用于初始化密钥对生成器。 此方法接受表示密钥大小的整数值。
使用此方法初始化在上一步中创建的KeyPairGenerator对象如下所示。
//Creating KeyPair generator object
KeyPairGenerator keyPairGen KeyPairGenerator.getInstance(DSA);
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);第3步生成KeyPairGenerator
可以使用KeyPairGenerator类的generateKeyPair()方法生成KeyPair。 使用此方法生成密钥对如下所示。
//Generate the pair of keys
KeyPair pair keyPairGen.generateKeyPair();第4步获取私钥/公钥
可以使用getPrivate()方法从生成的密钥对对象中获取私钥如下所示。
//Getting the private key from the key pair
PrivateKey privKey pair.getPrivate();可以使用getPublic()方法从生成的KeyPair对象获取公钥如下所示。
//Getting the public key from the key pair
PublicKey publicKey pair.getPublic();
Java示例 下面的示例演示了使用javax.crypto包的KeyPairGenerator类生成密钥的密钥。
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;public class KeyPairGenertor {public static void main(String args[]) throws Exception{//Creating KeyPair generator objectKeyPairGenerator keyPairGen KeyPairGenerator.getInstance(DSA);//Initializing the KeyPairGeneratorkeyPairGen.initialize(2048);//Generating the pair of keysKeyPair pair keyPairGen.generateKeyPair();//Getting the private key from the key pairPrivateKey privKey pair.getPrivate(); //Getting the public key from the key pairPublicKey publicKey pair.getPublic(); System.out.println(Keys generated);}
}执行上面示例代码得到下结果
Keys generated获取公钥接口 KeyPairGenerator keyPairGen KeyPairGenerator.getInstance(RSA);
keyPairGen.initialize(512);
KeyPair key keyPairGen.generateKeyPair();
Base64.Encoder encoder Base64.getEncoder();
Map.EntryString, String keyPair new AbstractMap.SimpleEntry(encoder.encodeToString(key.getPublic().getEncoded()),encoder.encodeToString(key.getPrivate().getEncoded()));
temporaryCodeDAO.cache(keyPair.getKey(), keyPair.getValue(), 100, TimeUnit.SECONDS);//缓存到Redis
return ResponseResult.data(keyPair.getKey());
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920266.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!