首页 > 编程语言 >陪玩app源码,加密算法中密钥生成和读取一览

陪玩app源码,加密算法中密钥生成和读取一览

时间:2024-07-06 09:42:58浏览次数:16  
标签:读取 getInstance app 生成 SecretKey 源码 密钥 public 加密算法

陪玩app源码,加密算法中密钥生成和读取一览

密钥生成与读取

密码学随机数
密码学随机数算法在安全场景中使用广泛,如:生成对称密钥、盐、iv等,因此相比普通的随机数算法(如线性同余),它需要更高强度的不可预测性,在Java中,使用SecureRandom来生成更安全的随机数,如下:

public class SecureRandoms {
    public static byte[] randBytes(int len) throws NoSuchAlgorithmException {
        byte[] bytes = new byte[len];
        SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
        secureRandom.nextBytes(bytes);
        return bytes;
    }
}

 

SecureRandom使用了更高强度的随机算法,同时会读取机器本身的随机熵值,如/dev/urandom,因此相比普通的Random,它具有更强的随机性,因此,对于需要生成密钥的场景,该用哪个要拧得清。

对称密钥
在JCA中对称密钥使用SecretKey表示,若要生成一个新的SecretKey,可使用KeyGenerator,如下:

//生成新的密钥
public static SecretKey genSecretKey() {
    KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    keyGenerator.init(SecureRandom.getInstance("SHA1PRNG"));
    SecretKey secretKey = keyGenerator.generateKey();
}

 

而如果是从文件中读取密钥的话,则可以借助SecretKeyFactory将其转换为SecretKey,如下:

//读取密钥
public static SecretKey getSecretKey() {
    byte[] keyBytes = readKeyBytes();
    String alg = "AES";
    SecretKey secretKey = SecretKeyFactory.getInstance(alg).generateSecret(new SecretKeySpec(keyBytes, alg));
}

 

非对称密钥
在JCA中,对于非对称密钥,公钥使用PublicKey表示,私钥使用PrivateKey表示,若要生成一个新的公私钥对,可使用KeyPairGenerator,如下:

//生成新的公私钥对
public static void genKeyPair() {
    KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
    keyPairGen.initialize(2048);
    KeyPair keyPair = keyPairGen.generateKeyPair();
    PublicKey publicKey = keyPair.getPublic();
    PrivateKey privateKey = keyPair.getPrivate();
}

 

而如果是从文件中读取公私钥的话,一般公钥是X509格式,而私钥是PKCS8格式,分别对应JCA中的X509EncodedKeySpec与PKCS8EncodedKeySpec,如下:

//读取私钥
public static PrivateKey getPrivateKey() {
    byte[] privateKeyBytes = readPrivateKeyBytes();
    PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
    PrivateKey privateKey = KeyFactory.getInstance("RSA").generatePrivate(pkcs8EncodedKeySpec);
}

//读取公钥
public static PublicKey getPublicKey() {
    byte[] publicKeyBytes = readPublicKeyBytes();
    X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKeyBytes);
    PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(x509EncodedKeySpec);
}

 

注意,KeyGenerator、KeyPairGenerator与KeyFactory从命名上看起来有点相似,但它们实现的功能是完全不同的,KeyGenerator、KeyPairGenerator用于生成新的密钥,而KeyFactory则用于将KeySpec转换为对应的Key密钥对象。

JCA密钥相关类关系一览,如下:

 

 

以上就是陪玩app源码,加密算法中密钥生成和读取一览, 更多内容欢迎关注之后的文章

标签:读取,getInstance,app,生成,SecretKey,源码,密钥,public,加密算法
From: https://www.cnblogs.com/yunbaomengnan/p/18286913

相关文章

  • 陪玩小程序源码,不容错过的加密算法整理清单
    陪玩小程序源码,不容错过的加密算法整理清单在开发陪玩小程序源码时,可采用的加密算法类型包含:对称加密对称加密算法,使用Cipher类即可,以广泛使用的AES为例,如下:publicbyte[]encrypt(byte[]data,Keykey){try{Ciphercipher=Cipher.getInstance("......
  • 陪玩系统源码,为守护系统安全增添更多助力
    陪玩系统源码,为守护系统安全增添更多助力在开发陪玩系统源码时,可以通过加密、解密算法来提升系统的安全性,比较常见的加密、解密算法类型有:1、对称加密:速度快,可逆,常见DES,AES等2、非对称加密:速度慢,可逆,常见RSA等3、签名算法:唯一,不可逆,常见MD5,SHA,SHA256等安全数据传输方案......
  • serverpod 基于dart 的flutter 下一代app 以及web server 开发框架
    serverpod按照官方的介绍是基于dart的flutter下一代app以及webserver开发框架包含的能力代码生成 可以辅助通过分析server端代码生成客户端代码,这样调用就比较方便了trpc就干了这类的事情世界一流的日志处理内置cache 内置cache可以减少数据库的开销简单方便使用......
  • Java项目:基于SSM框架实现的中小企业人力资源管理系统【ssm+B/S架构+源码+数据库+开题
    一、项目简介本项目是一套基于SSM框架实现的中小企业人力资源管理系统包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。项目都经过严格调试,eclipse或者idea确保可以运行!该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值......
  • 基于微信小程序的家具购物平台设计和实现-UniApp(代码+文档+运行成功)
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的家具购物小程序的设计与实现的开发全过程。通过分析基于微信小程序的家具购物小程序的设计与实现管理的不足,创建了一个计算机管理基于微信小程序的家具购物......
  • 基于微信小程序的学生知识成果展示与交流系统设计和实现-UniApp(代码+文档+运行成功)
    随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了微信小程序学生知识成果展示与交流的开发全过程。通过分析微信小程序学生知识成果展示与交流管理的不足,创建了一个计算机管理微信小程序学生知识成果展示与交流的方案。文......
  • 基于微信小程序的外来人员管理系统设计和实现-UniApp(代码+文档+运行成功)
    本微信小程序分为移动端和PC端两个部分,移动端主要使用Uni-App技术进行开发,可以在微信开发者工具和HBuilder中运行,同时PC端主要是给管理员人员使用的,PC端使用Java语言和流行的SpringMVC框架进行开发,数据库方面使用的是MySQL数据进行数据相关信息的存储随着我国经济迅速发......
  • 基于微信小程序的外卖点餐平台设计和实现-UniApp(代码+文档+运行成功)
    uni-appuni-app是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web;响应式;、以及各种小程序;微信/支付宝/百度/头条/QQ/钉钉/淘宝;、快应用等多个平台。DCloud公司拥有800万开发者、数百万应用、12亿手机端月活用户、数千款uni-a......
  • springboot的设计与实现(文档+源码)校园周边美食探索及分享平台
    大家好,我是永钊,一个混迹在java圈的码农,今天要和大家聊的是一款基于springboot的校园周边美食探索及分享平台,项目源码请联系永钊,目前有各类成品毕设javawebsshssmspringboot等等项目框架,源码丰富,欢迎咨询。 本网站系统研究了基于Spring Boot框架的校园周边美食探索及......
  • springboot校园资产管理的设计与实现(文档+源码)
    大家好,我是永钊,一个混迹在java圈的码农,今天要和大家聊的是一款基于springboot的校园资产管理,项目源码请联系永钊,目前有各类成品毕设javawebsshssmspringboot等等项目框架,源码丰富,欢迎咨询。 本网站系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网......