cipher java 安全_Java安全(未完待续)
加密, 解密
凯撒密码
左右位移
向右位移三位
a-> d
b -> e
c -> f
凯撒密码--频度分析法
例如:在英文中 e 出现的频率是最高的
将出现最多的字母付给e,总结规律,并推广到全文,再根据合理性确认
对称加密
加密和解密用的都是同一密钥。
如: IBM 的 DES加密
UTF-8是一种变长的编码方式,英文1个字节,中文三个字节
将原文的二进制文件按照64位一段进行反复加密,替换掉原文
package crypt;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.Base64;
/**
* @author:liupengfei
* @createTime: 2019/12/30 2:36 下午
* @discription:
* @package: crypt
* @project: test
**/
public class EnCryptInfo {
///长度大于等于8
private static final String KEY = "12345678944";
//密钥算法 DES/AES
private static final String KEY_ALGORITHM = "DES";
//转换模式 如果简写为DES ,即为默认"DES/ECB/PKCS5Padding"
//第一个:算法 algorithm DES/AES
//第二个:工作模式 mode ECB/CBC ECB固定64编译成固定代码,并行,CBC前面代码块会影响后面64位编码
//第三个:填充模式 padding 填充方式 不填充NoPadding,填充PKCS5Padding……
private static final String TRANSFORMATION = "DES/ECB/PKCS5Padding";
public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException, InvalidKeySpecException, UnsupportedEncodingException {
String input = "hello world!";
/**
* 实例话
*/
Cipher cipher = Cipher.getInstance(TRANSFORMATION);
/**
* 生成密钥
* 需要密钥工厂
* 需要密钥规格 方式+秘文
*/
SecretKeyFactory factory = SecretKeyFactory.getInstance(KEY_ALGORITHM);
KeySpec keySpec = new DESKeySpec(KEY.getBytes());
SecretKey key = factory.generateSecret(keySpec);
/**
* 模式 ENCRYPT_MODE = 1; DECRYPT_MODE = 2;
* 密钥
*/
//加密
cipher.init(Cipher.ENCRYPT_MODE, key);
//直接返回加密后字符串后有乱码的危险,导致再转换为字节数组时发生变化,这个时候一般使用Base64加密一下;
byte[] output = Base64.getEncoder().encode(cipher.doFinal(input.getBytes()));
System.out.println("加密:" + new String (output));
//解密
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] orgput = cipher.doFinal(Base64.getDecoder().decode(output));
System.out.println("解密:" + new String(orgput));
}
}
ps:直接返回加密后字符串后有乱码的危险,导致再转换为字节数组时发生变化,这个时候一般使用Base64加密一下;
非对称加密 AES
DES密钥长度8个字符64位,
AES 密钥长度16个字符128位,
3DES 强度类似A ES,加密效率比较差
AES的代码跟DES实现类似,
package crypt;
import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.util.Base64;
/**
* @author:liupengfei
* @createTime: 2019/12/30 2:36 下午
* @discription:
* @package: crypt
* @project: test
**/
public class AESEnCrypt {
///长度等于16,即128位
private static final String KEY = "0123456789ABCDEF";
public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException, InvalidKeySpecException, UnsupportedEncodingException {
String input = "hello world!";
/**
* 实例话
*/
Cipher cipher = Cipher.getInstance("AES");
/**
* 生成密钥
* 需要密钥工厂
* 需要密钥规格 方式+秘文
*/
SecretKeySpec secretKeySpec = new SecretKeySpec(KEY.getBytes(), "AES");
/**
* 模式 ENCRYPT_MODE = 1; DECRYPT_MODE = 2;
* 密钥
*/
//加密
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
byte[] output = Base64.getEncoder().encode(cipher.doFinal(input.getBytes()));
System.out.println("加密:" + new String (output));
//解密
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
byte[] orgput = cipher.doFinal(Base64.getDecoder().decode(output));
System.out.println("解密:" + new String(orgput));
}
}
消息摘要
数字签名
数字证书
cipher java 安全_Java安全(未完待续)相关推荐
- java opencv4.5 人脸对比_2020大数据Java面试总结(未完待续)
导读:纪录面试的经过,成功有经验,失败则有教训.目前已找到工作,做Java大数据,月base45k,整理总结,希望对你也有帮助. 自我介绍 公司介绍,近期的三家公司,在线教育独角兽.暴风影音.创维数字 ...
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
- pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)
1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...
- 性能测试调优篇---未完待续
性能测试调优一: 1.首先,看下选测交易的整个走向 纯系统内部交易: 选测交易如果是系统内的交易,每一步请求都和系统交互几次,访问了几个数据库,访问了数据库的那几张表?? 该交易走了那几台机器,这几台 ...
- 使用 Sharding-Jdbc 实现分库分表、读写分离(未完待续)
先贴代码, 回头讲解.未完待续 规划 实现分库分表.读写分离. 准备两张表:svc_order, svc_order_item 结构如下,可以想象成是未实施分库分表之前的数据库结构: CREATE D ...
- Flink1.11 读取kafka数据写入hive,未完待续
昨天晚上Flink1.11出了,这次改动很多,我只关心hive这一部分. 目前尝试了几个小时用代码读取hive,安装官网的文档,没成功,先蹭个热点,记录下. 先贴一下依赖吧: 注意:反正各种报错,看社 ...
- Spring Boot web开发(未完待续)
addViewController请求 attention: 想要把网站的图标换掉就在static下放一个 favicon.ico 的图标图片即可 Spring MVC 5.0.5官方文档 stati ...
- 【第三方框架】Glid4.4 完全学习(未完待续)
一.添加方法: 导入Glide4.4的依赖: implementation 'com.github.bumptech.glide:glide:4.4.0'annotationProcessor 'co ...
- 《今日简史》读书笔记(未完待续)
<今日简史>读书笔记(未完待续) 这本书是尤瓦尔·赫拉利的简史三部曲的最后一本,前2本书是<未来简史>和<人类简史>.根据豆瓣上网友的评价,这本书是尤瓦尔·赫拉利写 ...
- linux引数列项目过长,Linux 命令个人总结====== 未完待续 个人认为比较重要
Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789]命令.文件. [选项参数]: 数字"1"表示用户命令 ...
最新文章
- 关于建立完整商业应用软件框架库的设想
- MVC,MVP,MVVM设计模式的比较
- wpf将文字转化为图形_工程师们开发出将天然气转化为固体的方法
- python字典赋值方法_python如何给字典的键对应的值为字典项的字典赋值
- [POI2011]MET-Meteors 整体二分_树状数组_卡常
- PHP中两种包含文件方式、三种注释风格、四种标记风格
- salesforce 学习(超简介,以及传送门)
- Kubernetes 搭建 Kafka 和 Zookeeper 集群(完整教程)
- Java线程池关闭1-shutdown和isTerminated
- 力扣题目系列:1370. 上升下降字符串(Python题解)
- 在linux上下载图片,在Linux上使用4k Stogram下载Instagram图片库 | MOS86
- Magento国家代码缩写
- 【Linux】关于Linux中的权限
- 量价:2 量价基础扫描
- Linux 操作系统的体系结构
- 【源码阅读 | 04】update-notifier 检查包更新
- Dijkstra算法和Floyd算法超详解以及区别
- c中纠结不清的点(1)
- word 如何设置页码?分页?分节?
- Android中给定一个日期判断是周几.
热门文章
- 坦克机器人战斗仿真引擎 Robocode
- HTML5+CSS大作业——个人旅游图片博客(7页)
- 本科课程:计算机网络(四)
- 2022-2023级北京大学光华管理学院MBA招生简章
- 保研/考研简历中数模竞赛的经历,就该这样写
- 信息系统分析与设计——信息、管理与信息系统
- 提取NTLDR文件,分解Osloader.exe;pe文件找e_lfanew、IMAGE_EXPORT_DIRECTORY-AddressOfFunctions
- CIO:2013年OA选型六步走(摘)
- TIOBE 9 月编程语言排行榜,新 TIOBE 指数算法
- 活体识别3:论文笔记之《FACE ANTI-SPOOFING BASED ON COLOR TEXTURE ANALYSIS》