对称加密和非对称加密

news2024/12/24 20:59:30

对称加密

加密和解密时使用的是同一个秘钥,这种加密方法称为对称加密,也称为单密钥加密。
在这里插入图片描述
优点:算法公开、计算量小、加密速度快、加密效率高。
缺点:如果一方的秘钥被泄露,那么加密信息也就不安全了。

示例AES

    private static void encode(){
        System.out.println("1.请输入要加密的原文");
        String text = scanner.nextLine();
        System.out.println("2.请输入16位密钥");
        String password = scanner.next();

        while(password.length() != 16){
            scanner.nextLine();
            System.out.println("[密钥长度需为16位!]");
            password = scanner.next();
        }

        // key
        Key key = new SecretKeySpec(password.getBytes(), "AES");

        // 加密 -> Base64编码
        byte[] result = null;
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, key);
            result = cipher.doFinal(text.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }

        byte[] encode = Base64.getEncoder().encode(result);
        System.out.println("加密后的密文:\n" + new String(encode));
    }

    private static void decode() {
        System.out.println("1.请输入要解密的密文");
        String encrptText = scanner.nextLine();
        System.out.println("2.请输入16位密钥");
        String password = scanner.next();

        while(password.length() != 16){
            scanner.nextLine();
            System.out.println("[密钥长度需为16位!]");
            password = scanner.next();
        }

        // key
        Key key = new SecretKeySpec(password.getBytes(), "AES");

        // Base64解码 -> 解密
        byte[] result = null;
        byte[] decode = Base64.getDecoder().decode(encrptText.getBytes());
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, key);
            result = cipher.doFinal(decode);
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("解密后的原文:\n" + new String(result));
    }

非对称加密

非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。
公开密钥与私有密钥是一对。
如果用公钥对数据进行加密,只有用对应的私钥才能解密。
如果用私钥对数据进行加密,只有用对应的公钥才能解密。

工作过程

1、乙方生成一对密钥(公钥和私钥)并将公钥公开
2、甲方使用公钥对机密信息进行加密,发送给乙方。
3、乙方用自己保存的另一把密钥(私钥)对加密后的信息进行解密
在传输过程中,即使截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。

同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。

byte[]和String互转时注意

UTF
Acronym for Unicode (or UCS) Transformation Format.
Character Encoding Scheme
A character encoding form plus byte serialization. There are seven character encoding schemes in Unicode: UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, and UTF-32LE.
UTF-8
A multibyte encoding for text that represents each Unicode character with 1 to 4 bytes, and which is backward-compatible with ASCII. UTF-8 is the predominant form of Unicode in web pages.
Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
UTF-8是在互联网上使用最广的一种 Unicode 的实现方式。

    /**
     *  默认的是 UTF-8 编解码
     *  编码: String -> byte[], 汉字编码为 3个字节, 数字字符编码为 1个字节
     *  解码: byte[] -> String
     * @param args
     */
    public static void main(String[] args) {
        /**
         *  OK: String -> byte[] -> String
         */
        String str = "你玩的服务xx";
        byte[] bytes = str.getBytes();
        String newStr = new String(bytes);

        /**
         *  Error: byte[] -> String -> byte[]
         *  原因是:
         *  给定的字节数组实际上是自定义的
         *  进行解码时, 将 -37 和 -10 解码为了�
         *  重新编码时, 将 � 编码为了 -17, -65, -67
         *  所以前后不一致
         *  如何解决:
         *  使用 ISO-8859-1(单字节编解码)
         */
        byte[] anotherBytes = {40, -37, -10, 24, 9};       // [40, -37, -10, 24, 9]
        String anotherString = new String(anotherBytes);   // "(��\u0018\t"
        byte[] anotherNewBytes = anotherString.getBytes(); // [40, -17, -65, -67, -17, -65, -67, 24, 9]
    }

为什么中文编码后得到的字节数组是负的

在这里插入图片描述
在这里插入图片描述

Unicode符号范围     |        UTF-8编码方式
(十六进制)          |        (二进制)
----------------------+----------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

# 中文一般是4E00~9FA5, 对应上表的第三行, 可以看到对应的编码三个字节第一位都是1, 也就是负数

# UTF-8的编码规则
1) 对于单字节的符号, 字节的第一位设为0,后面7位为这个符号的Unicode码.因此对于英语字母,UTF-8编码和ASCII码是相同的.
2) 对于n字节的符号(n>1), 第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10.剩下的没有提及的二进制位,全部为这个符号的 Unicode码。

严的Unicode是4E25(100 1110 0010 0101),根据上表, 4E25处在第三行的范围内(0000 0800 - 0000 FFFF).
因此严的UTF-8编码需要三个字节,即格式是1110xxxx 10xxxxxx 10xxxxxx.
然后,从严的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0.
这样就得到了,严的UTF-8编码是(1110 0100) (1011 1000) (1010 0101), 转换成十六进制就是E4B8A5.

Base64编码原理
byte数组转换成String,再getBytes()之后byte数组与原数组不同
ASCII,UNICODE,UTF8编码规则
Java对称加密
AES解密报错,Input length must be multiple of 16 when decrypting
AES加密,Input length must be multiple of 16 when decryp
中文转byte数组时变成了负数
ASCII,Unicode和UTF-8
中日韩汉字Unicode编码表
unicode官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware Workstation中桥接模式、NAT模式、仅主机模式

一、VMware虚拟机的网络模式 VMware工作站虚拟机有三种网络模式【①桥接模式 ②NAT模式 ③仅主机模式】,如下图所示: 二、VMware虚拟机的网络模式介绍 2.0、VMware的虚拟设备 VMware的虚拟设备序号虚拟设备编号说明1VMnet0是虚拟桥接网络下的虚拟交换机…

【正点原子FPGA连载】 第二章 实验平台简介 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第二章 实验平台…

CNN (吴恩达 2021

week1-2 02_边缘检测例子_哔哩哔哩_bilibili ​ ​ 我们之前在说面部识别介绍过,要识别面部,都是从细微的边缘入手,一层一层聚类,最终实现人脸的识别。神经网络由浅层到深层,分别可以检测出图片的边缘特征 、局部特…

【Linux】基本指令(一)

文章目录前言操作系统简述学习指令的原因ls 指令pwd 指令cd 指令touch 指令tree 命令mkdir 指令rmdir 和 rm 指令nano 指令clear 指令whoami 指令常用键位结语前言 今天,我们开始 Linux 的学习。本篇博客内容为 操作系统简述、Linux 基本指令、和几个 Linux 常用键…

Wordpress 生手遇到一堆问题,反应巨慢,提速插件又是一堆错误

环境 LAMP:Debian,Apache,MariaDB,PHP 7.4 Wordpress安装几乎没有什么要求,几乎没有特别的设置就可以顺利安装成功,但随着插件的增加,问题就慢慢出来了。 写两页就会发现Wordpress反应巨慢&…

LiteFlow 开源编排规则引擎

osgi 让 java 系统变成模块化的形式,ASM 是一款修改字节码的框架,同类型的框架 Cglib。这些框架能加载一个 class 信息,Javaagent&Attach API 结合 ASM LiteFlow 的理念很简单,就是把系统中的各个逻辑切分成一小块一小块的&am…

XCIE-HUAWEI-PBR-MQC-引入形成的路由环路

XCIE-HUAWEI-PBR-MQC-引入形成的路由环路 首先来个测试 给你们选,答案选啥呢? 正确答案在结尾公布 正确答案是C 为什么呢? 首先,虽然ACL有一个齐总是拒绝的,但是呢,他两都是同一条路由 但是呢!&#x…

用于高通量实验筛选的化合物库 | MedChemExpress

Protein-Protein Interaction Library (含 59,370 种化合物) 用于发现新的 PPI 抑制剂 蛋白质相互作用 (PPI)是研究生物反应机制的重要工具。PPI 能产生许多效应,如改变蛋白质对其作用底物的专一性、生成新的结合位点、形成特异底物作用通道等。针对PPI的药物设计为…

Android App开发触摸事件中手势事件Event的分发流程讲解与实战(附源码 简单易懂)

需要源码或运行有问题请点赞关注收藏后评论区留言~~~ 一、手势事件的分发流程 智能手机的一大革命性技术就是把屏幕变为可触摸设备,既可用于信息输入也可以用于信息输出。与手势事件有关的方法主要有以下三个 dispatchTouchEvent 进行事件分发处理 返回结果表示该…

机器学习模型5——贝叶斯分类器

前置知识 条件概率 贝叶斯公式 (贝叶斯模型还是很好理解的,主要基于高中就学到过的条件概率。) 贝叶斯定理 P(A),P(B)分别是事件A,B发生的概率,而P(A|B)是在事件A在事件B发生的前提下发生的概率&#xf…

Burpsuite实验室之点击劫持

Burpsuite实验室之点击劫持 这是BurpSuit官方的实验室靶场,以下将记录个人点击劫持共5个Lab的通关过程 lab1: Basic clickjacking with CSRF token protection 带CSRF令牌保护的基本点击劫持 目标:官方给了一个账号密码wiener:peter&…

小型点阵屏后台监控系统研发

目 录 一、绪论 1 (一)课题的研究意义 1 (二)设计任务及要求 1 (三)单片机的发展史 2 (四)单片机的发展趋势 3 二、系统的整体结构 5 三、单片机介绍 6 1、单片机引脚介绍 9 2、复位…

感受野计算问题

我觉得以下两篇文章,在感受野的含义和计算上,说的是比较好的。 1、深度学习:VGG(Vision Geometrical Group)论文详细讲解_HanZee的博客-CSDN博客 2、关于感受野的总结 - 知乎 我们知道一个图片经过了一个7 * 7卷积…

【论文笔记】TINYCD: A (Not So) Deep Learning Model For Change Detection

论文 标题:TINYCD: A (Not So) Deep Learning Model For Change Detection paper: https://arxiv.org/abs/2207.13159 code: GitHub - AndreaCodegoni/Tiny_model_4_CD: Official implementation of TINYCD: A (NOT SO) DEEP LEARNING MO…

基于聚类算法:K-means、DBSCA算法完成航空客户价值分析任务 代码+数据

1.任务描述 信息时代的来临使得企业营销焦点从产品中心转变成客户中心。具体地,对不同的客户进行分类管理,给予不同类型的客户制定优化的个性化服务方案,采取不同的营销策略。将有限的营销资源集中于高价值的客户,实现企业利润最大化。因此,如何对客户进行合理的分类成为…

喵 ~ 小程序搭建记录

喵 ~ 小程序搭建记录前言一、搭建分析1. 项目里的页面相关2. 项目里的组件相关3. 项目里的 api 相关4. 项目里的没有用到的东西5. 项目中会用到的 iconfont二、 搭建参考参考博客三、 搭建实现1. 结构搭建2.全局样式导航栏配置tabBar配置四、uniapp项目搭建 请求配置前言 喵 ~…

1702967-37-0,PSMA-617 是prostate特异性膜抗原 (PSMA) 的强有效抑制剂

【产品描述】 Vipivotide tetraxetan (PSMA-617) 是prostate特异性膜抗原 (PSMA) 的强有效抑制剂,其 Ki 值为 0.37 nM。Vipivotide tetraxetan (PSMA-617)由三种成分组成:药效基团Glutamate-urea-Lysine,螯合剂DOTA(能够结合68Ga或177Lu&…

智慧住建工程项目监管数字化管理解决方案

在国家“放管服”大背景下,提高各级住房城乡建设主管部门的服务效能和依法治理水平的呼声越来越高。 住建部《“十四五”建筑业发展规划》提出,基于建筑产业互联网平台建设政府监管平台,把“新监管”提到重要位置,打造“工程项目监…

临时回忆啦啦啦啦

设置为private是为了防止其他类使用当前类的日志对象;如果当前类需要被子类继承,并且都使用同一个日志对象时,可设置为protected 。设置为static是为了让每个类中的日志对象只生成一份,日志对象是属于类的,不是属于具体…

MySQL8.0优化 - 索引的数据结构、B+树、常见索引概念、索引的代价

文章目录学习资料索引的数据结构B树常见索引概念聚簇索引特点优点缺点限制二级索引(辅助索引、非聚簇索引)回表联合索引Innodb的B树索引注意事项1、根页面位置万年不动2、内节点中目录项记录的唯一性3、一个页面最少存储2条记录索引的代价学习资料 【My…