首页 > 编程语言 >记录两种需要秘钥的加密算法

记录两种需要秘钥的加密算法

时间:2023-12-25 17:23:59浏览次数:32  
标签:记录 秘钥 init Cipher encryptedData byte keyGen cipher 加密算法

AES和RSA都是公认为安全的加密算法,在秘钥没有泄露的情况下,几乎不可能被破译(密钥的管理至关重要)。

/**
 * 对称加密
 *
 * @throws Exception
 */
public static void AES() throws Exception {
    KeyGenerator keyGen = KeyGenerator.getInstance("AES");
    // 可选128位、192位和256位,128位的密钥长度已经足够用于许多应用场景
    keyGen.init(128);
    SecretKey secretKey = keyGen.generateKey();

    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey);
    byte[] encryptedData = cipher.doFinal("123456789".getBytes());

    cipher.init(Cipher.DECRYPT_MODE, secretKey);
    byte[] decryptedData = cipher.doFinal(encryptedData);
    // Base64不会遗漏二进制数据,可以转为可视数据
    System.out.println("加密:" + Base64.getEncoder().encodeToString(encryptedData));
    System.out.println("解密: " + new String(decryptedData));
}

/**
 * 非对称加密
 *
 * @throws Exception
 */
public static void RSA() throws Exception {
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
    // 最小512(不安全),推荐2048位及以上
    keyGen.initialize(2048);
    KeyPair keyPair = keyGen.generateKeyPair();
    PublicKey publicKey = keyPair.getPublic();
    PrivateKey privateKey = keyPair.getPrivate();

    byte[] data = "123456789".getBytes();
    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] encryptedData = cipher.doFinal(data);

    cipher.init(Cipher.DECRYPT_MODE, privateKey);
    byte[] decryptedData = cipher.doFinal(encryptedData);

    System.out.println("加密:" + Base64.getEncoder().encodeToString(encryptedData));
    System.out.println("解密: " + new String(decryptedData));
}

标签:记录,秘钥,init,Cipher,encryptedData,byte,keyGen,cipher,加密算法
From: https://www.cnblogs.com/lemonpuer/p/17926546.html

相关文章

  • 使用WebStack和Laravel打造个人网址导航安装过程问题和详解记录
    前言最近测试了国内推出的多个AI大模型,为了方便记录同时方便推荐给朋友想做个AI工具网址导航。网上开源的项目有很多,最后选中了WebStack和Laravel,但是不知道是否作者长时间不更新了遇到不少问题,解决完记录一下。准备工作,购买云服务器,安装宝塔,解析域名解析等等正文1.登录宝塔创建站......
  • 本人曙光环境编译问题记录
       1.目前编译时显示:Didnotfind'7z'executablefortestingcompression.解决:安装以下7z解压软件在我的运行环境中moduleloadapps/p7zip/9.20.1执行这个命令就可以使用7z了   2. #加载发生冲突时需要卸载一些模块moduleunloadcompiler/rocm/2.......
  • 记录一个sql_mode的问题
    错误记录:Error1140:InaggregatedquerywithoutGROUPBY,expression#1ofSELECTlistcontainsnonaggregatedcolumn'***';thisisincompatiblewithsql_mode=only_full_group_by这个错误是因为SQL查询尝试在没有使用GROUPBY子句的情况下检索非聚合列.在MySQL......
  • 2023最新中级难度Ruby面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Ruby面试题合集问:请解释一下Ruby中的方法可见性修饰符有哪些,分别代表什么含义?在Ruby中,方法可见性修饰符用于定义一个方法或变量在类和子类中的可见性和可访问性。这些修饰符可以控制其他代码对它们的访问权限。以下是Ruby中主......
  • 2023最新高级难度Ruby面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度Ruby面试题合集问:在Ruby中,如何使用CAPI来扩展Ruby的功能?请举例说明。在Ruby中,可以通过CAPI来扩展Ruby的功能。使用CAPI编写Ruby扩展可以实现高性能的代码,并且允许你利用C语言的强大功能和灵活性。以下是一个简单的例子,展示......
  • SimpleMemory博客园主题使用记录
    SimpleMemory博客园主题使用记录前言这篇随笔是我第一次美化SimpleMemory博客园主题时写的相关配置记录。以便日后遗忘查阅!本主题选择的是SimpleMemoryThemeExtension,一款基于博客园SimpleMemory主题的扩展美化插件。优点很多,自行体会,反正我是很中意的,为作者点赞!作者示例博......
  • 记录一下python循环引用问题
    工作遇到了一个引用循环的问题,记录一下test.py:print('fffffff')importmain#导入main.pyprint('sdfdf')defaaa():print('aaaaaaaaaaa')main.py:print('-------------')fromtestimportaaa#试图从test.py导入aaa函数print('......
  • FineReport 11.0参数查询入门示例操作记录
    参数的主要作用是实现用户与数据的实时交互,即进行数据的过滤。我们可以在很多情况下使用参数,比如在单元格中引用参数来实现动态标题、根据参数值的不同显示不同值等等。如下图所示:links:https://help.fanruan.com/finereport/doc-view-166.html?source=0&from=base......
  • Golang 常用工具记录
    Golang常用工具记录1golang类1.1日常使用的copier复制结构体到另外一个结构体等等类似的功能asynqGo中简单、可靠、高效的分布式任务队列,使用redis做为brokermachineryMachinery是基于分布式消息传递的异步任务队列/作业队列。restyresty是Go语言的一个H......
  • RIPEMD加密算法:原理、应用与安全性
    一、引言在信息时代,数据安全愈发受到重视,加密算法作为保障信息安全的关键技术,其性能和安全性备受关注。RIPEMD(RACEIntegrityPrimitivesEvaluationMessageDigest)加密算法作为一种著名的哈希函数,广泛应用于网络安全、数据完整性等领域。本文将从各个方面介绍RIPEMD加密算......