bitpie安装官网下载|cipher
CIPHER中文(简体)翻译:剑桥词典
CIPHER中文(简体)翻译:剑桥词典
词典
翻译
语法
同义词词典
+Plus
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录
/
注册
中文 (简体)
查找
查找
英语-中文(简体)
cipher 在英语-中文(简体)词典中的翻译
ciphernoun uk
Your browser doesn't support HTML5 audio
/ˈsaɪ.fər/ us
Your browser doesn't support HTML5 audio
/ˈsaɪ.fɚ/
cipher noun
(SECRET LANGUAGE)
Add to word list
Add to word list
[ C or U ] (also cypher) a system of writing that prevents most people from understanding the message
密码;暗号
The message was written in cipher.
电文是用密码写的。
同义词
code (COMMUNICATION SYSTEM)
cipher noun
(PERSON)
[ C ] formal disapproving a person or group of people without power, but used by others for their own purposes, or someone who is not important
为人所利用的小人物;无名小卒;无足轻重的人
The interim government is a mere cipher for military rule.
过渡政府不过是军事统治的一枚棋子。
cipher noun
(NUMBER)
[ C ] US old-fashioned a zero
零
If you have no children, enter a cipher in the space on the form.
如果你没有孩子,在表上的空格里填零。
(cipher在剑桥英语-中文(简体)词典的翻译 © Cambridge University Press)
cipher的例句
cipher
The motive is that women may belong to themselves, that they may own their property, and they may not be in the eyes of the law economic ciphers.
来自 Hansard archive
该例句来自Hansard存档。包含以下议会许可信息开放议会许可v3.0
A third class of information theory codes are cryptographic algorithms (both codes and ciphers).
来自 Wikipedia
该例句来自维基百科,在CC BY-SA许可下可重复使用。
As such, it has the weaknesses of all substitution ciphers.
来自 Wikipedia
该例句来自维基百科,在CC BY-SA许可下可重复使用。
Block ciphers have one or more block size(s), but during transformation the block size is always fixed.
来自 Wikipedia
该例句来自维基百科,在CC BY-SA许可下可重复使用。
There is no record at that time of any techniques for the solution of simple substitution ciphers.
来自 Wikipedia
该例句来自维基百科,在CC BY-SA许可下可重复使用。
The cipher's strength rests on a strong mixing of its inner state between two consecutive iterations.
来自 Wikipedia
该例句来自维基百科,在CC BY-SA许可下可重复使用。
In my judgment it is exactly eight ciphers too many.
来自 Hansard archive
该例句来自Hansard存档。包含以下议会许可信息开放议会许可v3.0
His work also impacted modern designs of secret-key ciphers.
来自 Wikipedia
该例句来自维基百科,在CC BY-SA许可下可重复使用。
示例中的观点不代表剑桥词典编辑、剑桥大学出版社和其许可证颁发者的观点。
C1
cipher的翻译
中文(繁体)
密語, 密碼, 暗號…
查看更多内容
西班牙语
clave, cifra, código…
查看更多内容
葡萄牙语
código…
查看更多内容
更多语言
法语
土耳其语
in Dutch
捷克语
丹麦语
印尼语
泰语
越南语
波兰语
in Swedish
马来语
德语
挪威语
in Ukrainian
code (secret)…
查看更多内容
şifre…
查看更多内容
geheimschrift…
查看更多内容
šifra, kód…
查看更多内容
kodeskrift, kode…
查看更多内容
sandi…
查看更多内容
รหัสลับ…
查看更多内容
mật mã…
查看更多内容
szyfr…
查看更多内容
chiffer…
查看更多内容
tulisan rahsia…
查看更多内容
die Chiffre…
查看更多内容
kode, chifferskrift…
查看更多内容
шифр, код…
查看更多内容
需要一个翻译器吗?
获得快速、免费的翻译!
翻译器工具
cipher的发音是什么?
在英语词典中查看 cipher 的释义
浏览
cinephile
cingulate cortex
cinnamon
cinnamon bun
cipher
circa
circadian
circle
circlet
“每日一词”
veggie burger
UK
Your browser doesn't support HTML5 audio
/ˈvedʒ.i ˌbɜː.ɡər/
US
Your browser doesn't support HTML5 audio
/ˈvedʒ.i ˌbɝː.ɡɚ/
a type of food similar to a hamburger but made without meat, by pressing together small pieces of vegetables, seeds, etc. into a flat, round shape
关于这个
博客
Forget doing it or forget to do it? Avoiding common mistakes with verb patterns (2)
March 06, 2024
查看更多
新词
stochastic parrot
March 04, 2024
查看更多
已添加至 list
回到页面顶端
内容
英语-中文(简体)例句翻译
©剑桥大学出版社与评估2024
学习
学习
学习
新词
帮助
纸质书出版
Word of the Year 2021
Word of the Year 2022
Word of the Year 2023
开发
开发
开发
词典API
双击查看
搜索Widgets
执照数据
关于
关于
关于
无障碍阅读
剑桥英语教学
剑桥大学出版社与评估
授权管理
Cookies与隐私保护
语料库
使用条款
京ICP备14002226号-2
©剑桥大学出版社与评估2024
剑桥词典+Plus
我的主页
+Plus 帮助
退出
词典
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
翻译
语法
同义词词典
Pronunciation
剑桥词典+Plus
Shop
剑桥词典+Plus
我的主页
+Plus 帮助
退出
登录 /
注册
中文 (简体)
Change
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
中文 (简体)
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
关注我们
选择一本词典
最近的词和建议
定义
清晰解释自然的书面和口头英语
英语
学习词典
基础英式英语
基础美式英语
语法与同义词词典
对自然书面和口头英语用法的解释
英语语法
同义词词典
Pronunciation
British and American pronunciations with audio
English Pronunciation
翻译
点击箭头改变翻译方向。
双语词典
英语-中文(简体)
Chinese (Simplified)–English
英语-中文(繁体)
Chinese (Traditional)–English
英语-荷兰语
荷兰语-英语
英语-法语
法语-英语
英语-德语
德语-英语
英语-印尼语
印尼语-英语
英语-意大利语
意大利语-英语
英语-日语
日语-英语
英语-挪威语
挪威语-英语
英语-波兰语
波兰语-英语
英语-葡萄牙语
葡萄牙语-英语
英语-西班牙语
西班牙语-英语
English–Swedish
Swedish–English
半双语词典
英语-阿拉伯语
英语-孟加拉语
英语-加泰罗尼亚语
英语-捷克语
英语-丹麦语
English–Gujarati
英语-印地语
英语-韩语
英语-马来语
英语-马拉地语
英语-俄语
English–Tamil
English–Telugu
英语-泰语
英语-土耳其语
英语-乌克兰语
English–Urdu
英语-越南语
词典+Plus
词汇表
选择语言
中文 (简体)
English (UK)
English (US)
Español
Русский
Português
Deutsch
Français
Italiano
正體中文 (繁體)
Polski
한국어
Türkçe
日本語
Tiếng Việt
हिंदी
தமிழ்
తెలుగు
内容
英语-中文(简体)
Noun
cipher (SECRET LANGUAGE)
cipher (PERSON)
cipher (NUMBER)
例句
Translations
语法
所有翻译
我的词汇表
把cipher添加到下面的一个词汇表中,或者创建一个新词汇表。
更多词汇表
前往词汇表
对该例句有想法吗?
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
例句中的单词与输入词条不匹配。
该例句含有令人反感的内容。
取消
提交
Java使用Cipher类实现加密的过程详解_cipher.init-CSDN博客
>Java使用Cipher类实现加密的过程详解_cipher.init-CSDN博客
Java使用Cipher类实现加密的过程详解
最新推荐文章于 2022-06-23 08:47:35 发布
乐乐Java路漫漫
最新推荐文章于 2022-06-23 08:47:35 发布
阅读量9.2k
收藏
37
点赞数
3
分类专栏:
java
文章标签:
java
加密解密
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/b1303110335/article/details/109717838
版权
java
专栏收录该内容
64 篇文章
2 订阅
订阅专栏
文章目录
前言一、简单实现加解密1.1加密1.2、解密1.3 代码解释
2. Cipher类2.1 Cipher类提供了加密和解密的功能。2.2 Cipher对象需要初始化2.3 加密或解密
前言
提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、简单实现加解密
1.1加密
/**
* 加密
*
* @param content 待加密内容
* @param encryptKey 加密 KEY
* @return
*/
public static String encrypt(String content, String encryptKey) throws Exception {
if (content == null || encryptKey == null) {
throw new IllegalArgumentException("加密内容 content 和 encryptKey 不能为 null");
}
if (encryptKey.length() != KEY_LENGTH) {
throw new IllegalArgumentException("加密的encryptKey必须为16位");
}
// 创建cipher实例 参数按"算法/模式/填充模式" "AES/ECB/PKCS5Padding"
Cipher cipher = Cipher.getInstance(PADDING);
// 初始化ciper,
// (1)opmode :Cipher.ENCRYPT_MODE(加密模式)和 Cipher.DECRYPT_MODE(解密模式)
// (2)key :密匙,使用传入的盐构造出一个密匙,可以使用SecretKeySpec、KeyGenerator和KeyPairGenerator创建密匙,其中
// * SecretKeySpec和KeyGenerator支持AES,DES,DESede三种加密算法创建密匙
// * KeyPairGenerator支持RSA加密算法创建密匙
// (3)params :使用CBC模式时必须传入该参数,该项目使用IvParameterSpec创建iv 对象
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(encryptKey.getBytes(DEFAULT_ENCODING), KEY_ALGORITHM));
/* org.apache.commons.codec.binary.Base64; Base64.encodeBase64String() 解决Base64加密换行问题 */
// 加密或解密,返回byte数组
byte[] bytes = cipher.doFinal(content.getBytes(DEFAULT_ENCODING));
return Base64.encodeBase64String(bytes);
}
1.2、解密
/**
* 解密
*
* @param content 待解密内容
* @param decryptKey 解密的 KEY
* @return
*/
public static String decrypt(String content, String decryptKey) throws Exception {
if (content == null || decryptKey == null) {
throw new IllegalArgumentException("解密内容或解密key不能为null");
}
if (decryptKey.length() != KEY_LENGTH) {
throw new IllegalArgumentException("解密的decryptKey必须为16位");
}
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(decryptKey.getBytes(DEFAULT_ENCODING), KEY_ALGORITHM));
/*Base64.decodeBase64(content);*/
byte[] bytes = Base64.decodeBase64(content);
bytes = cipher.doFinal(bytes);
return new String(bytes, DEFAULT_ENCODING);
}
1.3 代码解释
上面简单实现了AES(“AES/CBC/PKCS5Padding”)的加密和解密。可以看到代码中主要的是cipher对象,并有以下调用
(1)新建Cipher对象时需要传入一个参数"AES/CBC/PKCS5Padding"
(2)cipher对象使用之前还需要初始化,共三个参数(“加密模式或者解密模式”,“密匙”,“向量”)
(3)调用数据转换:cipher.doFinal(content),其中content是一个byte数组
实际上Cipher类实现了多种加密算法,在创建Cipher对象时,传入不同的参数就可以进行不同的加密算法。而这些算法不同的地方只是创建密匙的方法不同而已。
如传入“AES/CBC/NoPadding”可进行AES加密,传入"DESede/CBC/NoPadding"可进行DES3加密。具体的后面会介绍到。
2. Cipher类
2.1 Cipher类提供了加密和解密的功能。
该项目使用Cipher类完成aes,des,des3和rsa加密.
获取Cipher类的对象:Cipher cipher = Cipher.getInstance(“DES/CBC/PKCS5Padding”); 参数按"算法/模式/填充模式",有以下的参数
AES/CBC/NoPadding (128)AES/CBC/PKCS5Padding (128)AES/ECB/NoPadding (128)AES/ECB/PKCS5Padding (128)DES/CBC/NoPadding (56)DES/CBC/PKCS5Padding (56)DES/ECB/NoPadding (56)DES/ECB/PKCS5Padding (56)DESede/CBC/NoPadding (168)DESede/CBC/PKCS5Padding (168)DESede/ECB/NoPadding (168)DESede/ECB/PKCS5Padding (168)RSA/ECB/PKCS1Padding (1024, 2048)RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048)RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048) (1)加密算法有:AES,DES,DESede(DES3)和RSA 四种 (2) 模式有CBC(有向量模式)和ECB(无向量模式),向量模式可以简单理解为偏移量,使用CBC模式需要定义一个IvParameterSpec对象 (3) 填充模式:NoPadding: 加密内容不足8位用0补足8位, Cipher类不提供补位功能,需自己实现代码给加密内容添加0, 如{65,65,65,0,0,0,0,0}PKCS5Padding: 加密内容不足8位用余位数补足8位, 如{65,65,65,5,5,5,5,5}或{97,97,97,97,97,97,2,2}; 刚好8位补8位8
2.2 Cipher对象需要初始化
init(int opmode, Key key, AlgorithmParameterSpec params) (1)opmode :Cipher.ENCRYPT_MODE(加密模式)和 Cipher.DECRYPT_MODE(解密模式) (2)key :密匙,使用传入的盐构造出一个密匙,可以使用SecretKeySpec、KeyGenerator和KeyPairGenerator创建密匙,其中
SecretKeySpec和KeyGenerator支持AES,DES,DESede三种加密算法创建密匙KeyPairGenerator支持RSA加密算法创建密匙 (3)params :使用CBC模式时必须传入该参数,该项目使用IvParameterSpec创建iv 对象
2.3 加密或解密
byte[] b = cipher.doFinal(content); 返回结果为byte数组,如果直接使用 new String(b) 封装成字符串,则会出现乱码
优惠劵
乐乐Java路漫漫
关注
关注
3
点赞
踩
37
收藏
觉得还不错?
一键收藏
知道了
0
评论
Java使用Cipher类实现加密的过程详解
文章目录前言一、简单实现加解密1.1加密1.2、解密1.3 代码解释2. Cipher类2.1 Cipher类提供了加密和解密的功能。2.2 Cipher对象需要初始化2.3 加密或解密前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、简单实现加解密1.1加密/** * 加密 * * @param
复制链接
扫一扫
专栏目录
php-使用php开发的cipher加密算法之XORCipher-加密算法实现.zip
03-01
php
php_使用php开发的cipher加密算法之XORCipher_加密算法实现
Java:使用javax.crypto.Cipher的AES算法实现数据加密解密
彭世瑜的博客
08-28
1183
【代码】Java:使用javax.crypto.Cipher的AES算法实现数据加密解密。
参与评论
您还未登录,请先
登录
后发表或查看评论
RSA+ECB+OAEPWithSHA-256AndMGF1Padding
01-07
选择RsA算法进行非对称加密,密钥长度为2048位及以上位数,使用oAEP填充方式。
Java使用Hutool实现AES、DES加密解密的方法
08-29
本篇文章主要介绍了Java使用Hutool实现AES、DES加密解密的方法,具有一定的参考价值,有兴趣的可以了解一下
Java加密,实现Cipher类支持的加密算法.zip
01-14
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势包括以下几个方面:
跨平台性(Write Once, Run Anywhere): Java的代码可以在不同的平台上运行,只需编写一次代码,就可以在任何支持Java的设备上执行。这得益于Java虚拟机(JVM),它充当了代码和底层硬件之间的中介。
面向对象: Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的概念。这使得Java编写的代码更加模块化、可维护和可扩展。
多线程支持: Java内置了对多线程的支持,允许程序同时执行多个任务。这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。
自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,减轻了程序员的负担,同时也减少了内存泄漏的风险。
java AES对称可逆加密
weixin_42660202的博客
06-23
1129
对称可逆加密
Java加密与解密的艺术-----Cipher类
u012598738的专栏
04-10
2461
Cipher类为加密和解密提供密码功能。它构成了Java Cryptographic Extension(JCE)框架的核心。在本章的上述内容中,只完成了密钥的处理,并未完成加密与解密的操作。这些核心操作需要通过Cipher类来实现。
// 此类为加密和解密提供密码功能
public class Cipher
extends Object
Cipher类是一个引擎类,它需要通过getIn
Java 加密扩展(JCE)框架 之 Cipher 加密与解密
热门推荐
蚩尤后裔-汪茂雄
05-18
1万+
Cipher 密码概述
1、javax.crypto.Cipher 类提供加密和解密的功能,它构成了Java加密扩展(JCE)框架的核心。
2、Cipher 的 getInstance(String transformation) 方法可以获取实例,参数 transformation 表示转换名称,包括:加密算法/反馈模式/填充方案。加密算法是必选项,反馈模式与填充方案可以不写使用默认值。如:
Cipher cipher = Cipher.getInstance("AES");
Cipher c =
Java对称加密
田野上的风筝
08-16
2385
BASE64加解密
BASE64是一种比较基本、简单的加密算法,其实BASE64主要作用不是用于加密,BASE64是把与原始的数据转换成另一种编码格式,这样方便在网络上传输。所以严格来说,BASE64并不是安全的加密解密算法,但通过BASE64编码过后原来的数据也会改变成非原来的数据的字符。
例
/*该方法创建BASE64Encoder对象后调用encodeBuffer()方法对数据...
Cipher的初应用
hardlydream的博客
03-13
1141
javax.crypto.Cipher是JCA(Java Cryptographic Extension,java加密扩展)提供的密码框架。
//java加密扩展(JCE)框架的核心。提供了加密和解密的功能。
Cipher cipher = Cipher.getInstance("DES");
//用秘钥与随机源初始化此密码
cipher.init(2,secretKey,sr);
//在单一部分操作中加密或解密数据。或完成多部分操作。
byte[] bytes = cipher.doFin
DES加密解密java工具类
07-31
DES加密解密java工具类
public static final String KEY_ALGORITHM = "DES";
public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5PADDING";
validKeySpecException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
Key k = toKey(key);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM, getDecryptProviderInstance());
php-使用php开发的cipher加密算法之VignereCipher-加密算法实现.zip
最新发布
03-01
php
php_使用php开发的cipher加密算法之VignereCipher_加密算法实现
java加密解密算法类_Cipher
03-12
java实现加密解密算法工具类_Cipher
hill:Hill cipher在Java中的实现
05-01
Hill cipher在Java中的实现
该程序是的练习,课程。 它实际上是2017-2018学年第四次练习的问题3的答案。
它仅适用于a-zA-z英文字符,并支持使用0..25或1..26词汇进行加密/解密。
该程序删除a-zA-z以外的字符,并将字符串转换为大写。 如果字符串长度是奇数,则会在末尾添加一个额外的“ Q”字符。 结果以字符对显示,用破折号分隔。
加密示例:
Input: meet me at the usual place at ten rather than eight oclock
Key Matrix: |9 5|
|4 7|
Output 0..25: UK-IX-UK-YD-RO-ME-IW-SZ-XW-IO-KU-NU-KH-XH-RO-AJ-RO-AN-QY-EB-TL-KJ-EG-YG
Output 1..26: GV-UI
php-使用php开发的cipher加密算法之CaesarCipher-加密算法实现.zip
03-01
php
php_使用php开发的cipher加密算法之CaesarCipher_加密算法实现
ConcurrentHashMap 1.7与1.8的区别
乐乐的博客
07-08
1万+
1.锁结构不同
在JDK1.7中,ConcurrentHashMap基于Segment+HashEntry数组实现的。Segment是Reentrant的子类,而其内部也维护了一个Entry数组,这个Entry数组和HashMap中的Entry数组是一样的。所以说Segment其实是一个锁,可以锁住一段哈希表结构,而ConcurrentHashMap中维护了一个Segment数组,所以是基于分段锁实现的。 而JDK1.8中,ConcurrentHashMap摒弃了Segment,而是采用synchroniz
缺少org.apache.commons.collections.CollectionUtils?
乐乐的博客
01-08
6070
也许你正在寻找的jar是apache commons-collections:
要么
&l
Collectors.toMap报错 :Duplicate key
乐乐的博客
04-20
6035
第一种写法:使用Collectors.toMap的方法,如果key重复会直接报错
第二种写法: 使用mergeFunction参数,可以取重复的key中的第一个或最后一个
List
TpLifecircleConsumeDO tpLifecircleConsumeDO = ne...
java 怎么不用cipher类进行des sha1 加密
03-27
可以使用Java Security库中的MessageDigest类进行SHA1哈希加密,也可以使用Java Cryptography Extension库中的SecretKeyFactory类和KeySpec类进行DES加密。以下是使用这两种方法进行加密的示例代码:
SHA1加密:
```java
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA1Util {
public static String sha1(String input) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] result = md.digest(input.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : result) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
}
```
DES加密:
```java
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.security.SecureRandom;
public class DESUtil {
public static byte[] encrypt(byte[] data, String key) throws Exception {
DESKeySpec dks = new DESKeySpec(key.getBytes());
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey secretKey = keyFactory.generateSecret(dks);
SecureRandom sr = new SecureRandom();
byte[] iv = new byte[8];
sr.nextBytes(iv);
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, secretKey, new javax.crypto.spec.IvParameterSpec(iv));
byte[] encryptedData = cipher.doFinal(data);
byte[] result = new byte[iv.length + encryptedData.length];
System.arraycopy(iv, 0, result, 0, iv.length);
System.arraycopy(encryptedData, 0, result, iv.length, encryptedData.length);
return result;
}
}
```
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
乐乐Java路漫漫
CSDN认证博客专家
CSDN认证企业博客
码龄11年
暂无认证
196
原创
3万+
周排名
109万+
总排名
96万+
访问
等级
4989
积分
79
粉丝
192
获赞
59
评论
650
收藏
私信
关注
热门文章
crontab 检测是否正常运行
353607
什么是 RPC 框架
112020
curl模拟delete/put/post/get请求
71957
mysql之explain详解(分析索引的最佳使用)
33079
sphinx从安装到使用
26345
分类专栏
队列
16篇
JVM
2篇
linux
5篇
springboot
14篇
dubbo
5篇
elasticsearch
3篇
多线程
4篇
redis
14篇
zookeeper
9篇
idea
3篇
错误管理
3篇
mybatis
3篇
netty
2篇
网络协议
2篇
代码规范
1篇
kafka
1篇
数据库
18篇
版本管理工具
4篇
memcached
2篇
sphinx
1篇
服务器
11篇
nginx
12篇
缓存
10篇
php
30篇
session
2篇
http
3篇
算法
5篇
vagrant
1篇
mysql
17篇
区块链
1篇
rpc
5篇
java
64篇
ajax
2篇
最新评论
Java内存模型与JVM内存结构
floatinglove:
学懂了吗?就在这瞎发博客
Reactor模型详解
好烦吃不胖:
这个博客主要内容来自《Scalable IO in Java》也是java.nio作者写的,感兴趣的可以去看看,
Reactor模型详解
qq_42167006:
不需要,BIO是有一个socket连接就新启动一个线程来应答这个连接,所以对当前的线程来说,它只需要完成当前的连接请求内容就行了。
mysql在扫描情况下会选择全表扫描而不是走索引
loww:
很棒捏
Error:java: 无效的标记: -parameters
heybiblee02:
jdk版本也一致
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
jmap导出快照和分析
linux 批量创建表命令
springboot访问接口自动跳转到登陆页面问题排查
2022年1篇
2021年41篇
2020年88篇
2018年23篇
2017年47篇
2016年20篇
目录
目录
分类专栏
队列
16篇
JVM
2篇
linux
5篇
springboot
14篇
dubbo
5篇
elasticsearch
3篇
多线程
4篇
redis
14篇
zookeeper
9篇
idea
3篇
错误管理
3篇
mybatis
3篇
netty
2篇
网络协议
2篇
代码规范
1篇
kafka
1篇
数据库
18篇
版本管理工具
4篇
memcached
2篇
sphinx
1篇
服务器
11篇
nginx
12篇
缓存
10篇
php
30篇
session
2篇
http
3篇
算法
5篇
vagrant
1篇
mysql
17篇
区块链
1篇
rpc
5篇
java
64篇
ajax
2篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
cipher | Microsoft Learn
cipher | Microsoft Learn
跳转至主内容
此浏览器不再受支持。
请升级到 Microsoft Edge 以使用最新的功能、安全更新和技术支持。
下载 Microsoft Edge
有关 Internet Explorer 和 Microsoft Edge 的详细信息
目录
退出焦点模式
使用英语阅读
保存
目录
使用英语阅读
保存
打印
电子邮件
目录
cipher
项目
04/12/2023
8 个参与者
反馈
本文内容
显示或更改 NTFS 卷上的目录和文件的加密。 如果不带参数使用,cipher 将显示当前目录及其所包含任何文件的加密状态。
语法
cipher [/e | /d | /c] [/s:
cipher /k
cipher /r:
cipher /u [/n]
cipher /w:
cipher /x[:efsfile] [filename]
cipher /y
cipher /adduser [/certhash:
cipher /removeuser /certhash:
cipher /rekey [pathname [...]]
参数
参数
说明
/b
如果遇到错误,则中止。 默认情况下,即使遇到错误,cipher 也会继续运行。
/c
显示有关加密文件的信息。
/d
解密指定的文件或目录。
/e
加密指定的文件或目录。 对目录进行标记,以便以后添加的文件将被加密。
/h
显示具有隐藏属性或系统属性的文件。 默认情况下,不对这些文件进行加密或解密。
/k
创建用于加密文件系统 (EFS) 文件的新证书和密钥。 如果指定了 /k 参数,则忽略所有其他参数。
/r:
生成 EFS 恢复代理密钥和证书,然后将其写入 .pfx 文件(包含证书和私钥)和 .cer 文件(仅包含证书)。 如果指定了 /smartcard,它会将恢复密钥和证书写入智能卡,并且不会生成 .pfx 文件。
/s:
对指定目录中的所有子目录执行指定的操作。
/u [/n]
查找本地驱动器上的所有加密文件。 如果与 /n 参数一起使用,则不进行更新。 如果不使用 /n,/u 会将用户的文件加密密钥或恢复代理的密钥与当前密钥进行比较,如果密钥发生更改,则进行更新。 此参数仅适用于 /n.
/w:
从整个卷上的可用但未使用的磁盘空间中移除数据。 如果使用 /w 参数,则忽略所有其他参数。 指定的目录可以位于本地卷中的任何位置。 如果它是装入点或指向另一个卷中的目录,则将移除该卷上的数据。
/x[:efsfile] [
将 EFS 证书和密钥备份到指定的文件名。 如果与 :efsfile 一起使用,则 /x 将备份用于加密文件的用户证书。 否则,将备份用户当前的 EFS 证书和密钥。
/y
在本地计算机上显示当前的 EFS 证书缩略图。
/adduser [/certhash:
/certfile:
/rekey
更新指定的加密文件以使用当前配置的 EFS 密钥。
/removeuser /certhash:
从指定的文件中移除用户。 为 /certhash 提供的哈希必须是要删除的证书的 SHA1 哈希。
/?
在命令提示符下显示帮助。
备注
如果父目录未加密,则加密文件在被修改后可能会被解密。 因此,当你加密文件时,你也应该加密父目录。
管理员可以将 .cer 文件的内容添加到 EFS 恢复策略中,以便为用户创建恢复代理,然后导入 .pfx 文件以恢复单个文件。
可以使用多个目录名和通配符。
必须在多个参数之间添加空格。
示例
若要显示当前目录中每个文件和子目录的加密状态,请键入:
cipher
加密的文件和目录用 E 标记。未加密的文件和目录用 U 标记。例如,以下输出指示当前目录及其所有内容当前未加密:
Listing C:\Users\MainUser\Documents\
New files added to this directory will not be encrypted.
U Private
U hello.doc
U hello.txt
要在上一个示例中使用的私有目录上启用加密,请键入:
cipher /e private
显示以下输出:
Encrypting files in C:\Users\MainUser\Documents\
Private [OK]
1 file(s) [or directorie(s)] within 1 directorie(s) were encrypted.
cipher 命令显示以下输出:
Listing C:\Users\MainUser\Documents\
New files added to this directory will not be encrypted.
E Private
U hello.doc
U hello.txt
其中 Private 目录现在被标记为加密。
相关链接
命令行语法项
其他资源
加州消费者隐私法案 (CCPA) 禁用图标
你的隐私选择
主题
亮
暗
高对比度
早期版本
博客
参与
隐私
使用条款
商标
© Microsoft 2024
其他资源
本文内容
加州消费者隐私法案 (CCPA) 禁用图标
你的隐私选择
主题
亮
暗
高对比度
早期版本
博客
参与
隐私
使用条款
商标
© Microsoft 2024
Cipher | Definition, Types, & Facts | Britannica
Cipher | Definition, Types, & Facts | Britannica
Search Britannica
Click here to search
Search Britannica
Click here to search
Login
Subscribe
Subscribe
Home
Games & Quizzes
History & Society
Science & Tech
Biographies
Animals & Nature
Geography & Travel
Arts & Culture
Money
Videos
On This Day
One Good Fact
Dictionary
New Articles
History & Society
Lifestyles & Social Issues
Philosophy & Religion
Politics, Law & Government
World History
Science & Tech
Health & Medicine
Science
Technology
Biographies
Browse Biographies
Animals & Nature
Birds, Reptiles & Other Vertebrates
Bugs, Mollusks & Other Invertebrates
Environment
Fossils & Geologic Time
Mammals
Plants
Geography & Travel
Geography & Travel
Arts & Culture
Entertainment & Pop Culture
Literature
Sports & Recreation
Visual Arts
Companions
Demystified
Image Galleries
Infographics
Lists
Podcasts
Spotlights
Summaries
The Forum
Top Questions
#WTFact
100 Women
Britannica Kids
Saving Earth
Space Next 50
Student Center
Home
Games & Quizzes
History & Society
Science & Tech
Biographies
Animals & Nature
Geography & Travel
Arts & Culture
Money
Videos
cipher
Table of Contents
cipher
Table of Contents
Introduction
References & Edit History
Quick Facts & Related Topics
Images
Quizzes
Codes, Secrets, and Ciphers Quiz
Discover
How Many Electoral College Votes Does Each U.S. State Have?
The 10 Greatest Basketball Players of All Time
9 Things You Might Not Know About Adolf Hitler
7 of History's Most Notorious Serial Killers
How Did Alexander the Great Really Die?
What Did Cleopatra Look Like?
9 of the World’s Deadliest Spiders
cipher
cryptology
Actions
Cite
verifiedCite
While every effort has been made to follow citation style rules, there may be some discrepancies.
Please refer to the appropriate style manual or other sources if you have any questions.
Select Citation Style
MLA
APA
Chicago Manual of Style
Copy Citation
Share
Share
Share to social media
URL
https://www.britannica.com/topic/cipher
Give Feedback
External Websites
Feedback
Corrections? Updates? Omissions? Let us know if you have suggestions to improve this article (requires login).
Feedback Type
Select a type (Required)
Factual Correction
Spelling/Grammar Correction
Link Correction
Additional Information
Other
Your Feedback
Submit Feedback
Thank you for your feedback
Our editors will review what you’ve submitted and determine whether to revise the article.
External Websites
Khan Academy - Ciphers vs. codes
Cryptography - Simple Substitution Ciphers
Britannica Websites
Articles from Britannica Encyclopedias for elementary and high school students.
ciphers and codes - Student Encyclopedia (Ages 11 and up)
Cite
verifiedCite
While every effort has been made to follow citation style rules, there may be some discrepancies.
Please refer to the appropriate style manual or other sources if you have any questions.
Select Citation Style
MLA
APA
Chicago Manual of Style
Copy Citation
Share
Share
Share to social media
URL
https://www.britannica.com/topic/cipher
Feedback
External Websites
Feedback
Corrections? Updates? Omissions? Let us know if you have suggestions to improve this article (requires login).
Feedback Type
Select a type (Required)
Factual Correction
Spelling/Grammar Correction
Link Correction
Additional Information
Other
Your Feedback
Submit Feedback
Thank you for your feedback
Our editors will review what you’ve submitted and determine whether to revise the article.
External Websites
Khan Academy - Ciphers vs. codes
Cryptography - Simple Substitution Ciphers
Britannica Websites
Articles from Britannica Encyclopedias for elementary and high school students.
ciphers and codes - Student Encyclopedia (Ages 11 and up)
Also known as: cipher system, cryptosystem, single-key cryptography
Written and fact-checked by
The Editors of Encyclopaedia Britannica
Encyclopaedia Britannica's editors oversee subject areas in which they have extensive knowledge, whether from years of experience gained by working on that content or via study for an advanced degree. They write new content and verify and edit content received from contributors.
The Editors of Encyclopaedia Britannica
Article History
Table of Contents
ADFGVX cipher
See all media
Key People:
Agnes Meyer Driscoll
(Show more)
Related Topics:
Data Encryption Standard
public-key cryptography
transposition cipher
substitution cipher
product cipher
(Show more)
See all related content →
cipher, any method of transforming a message to conceal its meaning. The term is also used synonymously with ciphertext or cryptogram in reference to the encrypted form of the message. A brief treatment of ciphers follows. For full treatment, see cryptology.All ciphers involve either transposition or substitution, or a combination of these two mathematical operations—i.e., product ciphers. In transposition cipher systems, elements of the plaintext (e.g., a letter, word, or string of symbols) are rearranged without any change in the identity of the elements. In substitution systems, such elements are replaced by other objects or groups of objects without a change in their sequence. In systems involving product ciphers, transposition and substitution are cascaded; for example, in a system of this type called a fractionation system, a substitution is first made from symbols in the plaintext to multiple symbols in the ciphertext, which is then superencrypted by a transposition. All operations or steps involved in the transformation of a message are carried out in accordance to a rule defined by a secret key known only to the sender of the message and the intended receiver.
Britannica Quiz
Codes, Secrets, and Ciphers Quiz
Cipher devices or machines have commonly been used to encipher and decipher messages. The first cipher device appears to have been employed by the ancient Greeks around 400 bce for secret communications between military commanders. This device, called the scytale, consisted of a tapered baton around which was spirally wrapped a piece of parchment inscribed with the message. When unwrapped the parchment bore an incomprehensible set of letters, but when wrapped around another baton of identical proportions, the original text reappeared. Other simple devices known as cipher disks were used by European governments for diplomatic communications by the late 1400s. These devices consisted of two rotating concentric circles, both bearing a sequence of 26 letters. One disk was used to select plaintext letters, while the other was used for the corresponding cipher component.In 1891 Étienne Bazeries, a French cryptologist, invented a more sophisticated cipher device based on principles formulated by Thomas Jefferson of the United States nearly a century earlier. Bazeries’s so-called cylindrical cryptograph was made up of 20 numbered rotatable disks, each with a different alphabet engraved on its periphery. The disks were arranged in an agreed-upon order on a central shaft and rotated so that the first 20 letters of the message plaintext appeared in a row; the ciphertext was then formed by arbitrarily taking off any other row. The remaining letters of the message were treated in the same way, 20 letters at a time.Advances in radio communications and electromechanical technology in the 1920s brought about a revolution in cryptodevices—the development of the rotor cipher machine. One common type of rotor system implemented product ciphers with simple monoalphabetic substitution ciphers as factors. The rotors in this machine consisted of disks with electrical contacts on each side that were hardwired to realize an arbitrary set of one-to-one connections (monoalphabetic substitution) between the contacts on opposite sides of the rotor.
The rotor cipher machine was used extensively by both the Allied and the Axis powers during World War II, with the most notable such device being the German Enigma machine. The application of electronic components in subsequent years resulted in significant increases in operation speed though no major changes in basic design. Since the early 1970s, cryptologists have adapted major developments in microcircuitry and computer technology to create new, highly sophisticated forms of cryptodevices and cryptosystems, as exemplified by the Fibonacci generator and the implementation of the Data Encryption Standard (DES) through the use of microprocessors.
Get a Britannica Premium subscription and gain access to exclusive content.
Subscribe Now
The Editors of Encyclopaedia BritannicaThis article was most recently revised and updated by Erik Gregersen.
恺撒密码_百度百科
_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心恺撒密码播报讨论上传视频加密技术收藏查看我的收藏0有用+10本词条由《中国科技信息》杂志社 参与编辑并审核,经科普中国·科学百科认证 。在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。中文名恺撒密码外文名Caesar's code别 名恺撒加密性 质加密技术类 别密码学载 体字母目录1历史2概念3特定恺撒密码4密码破解5例子历史播报编辑根据苏维托尼乌斯于公元二世纪写的《恺撒传》中的记载 [4],恺撒曾用此方法对重要的军事信息进行加密: [1]如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;他用A代表Z。简而言之,就是将真正的信件内容(明文)中的每一个字母用其后的第N个字母代替,转换成一封密信(密文)。这样,即便敌军截住信件,也不知其意。据说,这种加密方法在当时的古罗马颇为流行。这种将字母表中的字母移动一定位置而实现加密的方法,被称为“恺撒移位密码”,简称“恺撒密码”。移动的位数N就是加密和解密的密钥。 [4]另外,有证据表明,恺撒曾经使用过更为复杂的密码系统:文法学家普罗布斯曾经写过一份独具创新的手稿,研究恺撒书信中包含有秘密信息的字母。已经无法弄清恺撒密码在当时有多大的效果,但是有理由相信它是安全的。因为恺撒大部分敌人都是目不识丁的,而其余的则可能将这些消息当作是某个未知的外语。即使有某个敌人获取了恺撒的加密信息,根据现有的记载,当时也没有任何技术能够解决这一最基本、最简单的替换密码。现存最早的破解方法记载在公元9世纪阿拉伯的阿尔·肯迪的有关发现频率分析的著作中。 [2]概念播报编辑在密码学中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。恺撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。特定恺撒密码播报编辑根据偏移量的不同,还存在若干特定的恺撒密码名称:偏移量为10:Avocat(A→K)偏移量为13:ROT13偏移量为-5:Cassis (K 6)偏移量为-6:Cassette (K 7)密码破解播报编辑即使使用唯密文攻击,恺撒密码也是一种非常容易破解的加密方式。可能有两种情况需要考虑:(1)攻击者知道(或者猜测)密码中使用了某个简单的替换加密方式,但是不确定是恺撒密码;(2)攻击者知道(或者猜测)使用了恺撒密码,但是不知道其偏移量。对于第一种情况,攻击者可以通过使用诸如频率分析或者样式单词分析的方法, [3]马上就能从分析结果中看出规律,得出加密者使用的是恺撒密码。对于第二种情况,解决方法更加简单。由于使用恺撒密码进行加密的语言一般都是字母文字系统,因此密码中可能是使用的偏移量也是有限的,例如使用26个字母的英语,它的偏移量最多就是25(偏移量26等同于偏移量0,即明文;偏移量超过26,等同于偏移量1-25)。因此可以通过穷举法,很轻易地进行破解。其中一种方法是在表格中写下密文中的某个小片段使用所有可能的偏移量解密后的内容——称为候选明文,然后分析表格中的候选明文是否具有实际含义,得出正确的偏移量,解密整个密文。例如,被选择出的密文片段是"EXXEGOEXSRGI",从右表中的候选明文,可以很快看出其正确的偏移量是4。也可以通过在每一个密文单词的每一个字母下面,纵向写下整个字母表其他字母,然后可以通过分析,得出其中的某一行便是明文。另外一种攻击方法是通过频率分析。当密文长度足够大的情况下,可以先分析密文中每个字母出现的频率,然后将这一频率与正常情况下的该语言字母表中所有字母的出现频率做比较。例如在英语中,正常明文中字母E和T出现的频率特别高,而字母Q和Z出现的频率特别低,而在法语中出现频率最高的字母是E,最低的是K和W。可以通过这一特点,分析密文字母出现的频率,可以估计出正确的偏移量。此外,有时还可以将频率分析从字母推广到单词,例如英语中,出现频率最高的单词是:the, of, and, a, to, in...。可以通过将最常见的单词的所有可能的25组密文,编组成字典,进行分析。比如QEB可能是the,MPQY可能是单词know(当然也可能是aden)。但是频率分析也有其局限性,它对于较短或故意省略元音字母或者其他缩写方式写成的明文加密出来的密文进行解密并不适用。另外,通过多次使用恺撒密码来加密并不能获得更大的安全性,因为使用偏移量A加密得到的结果再用偏移量B加密,等同于使用A+B的偏移量进行加密的结果。例子播报编辑恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ ;密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC。使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ;密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:解密就是:新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000cipher是什么意思_cipher的翻译_音标_读音_用法_例句_爱词霸在线词典
er是什么意思_cipher的翻译_音标_读音_用法_例句_爱词霸在线词典首页翻译背单词写作校对词霸下载用户反馈专栏平台登录cipher是什么意思_cipher用英语怎么说_cipher的翻译_cipher翻译成_cipher的中文意思_cipher怎么读,cipher的读音,cipher的用法,cipher的例句翻译人工翻译试试人工翻译翻译全文简明柯林斯牛津cipherGRE/TOEFL英 [ˈsaɪfə(r)]美 [ˈsaɪfər]释义n.密码; 零; 不重要的人; 无价值的东西大小写变形:CIPHER点击 人工翻译,了解更多 人工释义词态变化复数: ciphers;实用场景例句全部密码a message in cipher密码信牛津词典...converting their messages into ciphers.把他们的信息转换成密码柯林斯高阶英语词典...a cipher clerk.译电员柯林斯高阶英语词典He was little more than a cipher who faithfully carried out the Fuehrer's commands.他只不过是个走狗,忠实执行元首的命令。柯林斯高阶英语词典At last they managed to puzzle out the meaning of the cipher.最后他们终于弄清楚这符号是什么意思.期刊摘选Software of brute force attack on block cipher algorithms is designed based on distributed computing.暴力破解分组密码算法是密码学的重要研究方向.期刊摘选The army uses a special cipher so that military messages are kept secret.军队使用一种特殊密码,军事电讯因此得以保密.辞典例句A system of secret or cipher writing cipher.一种书写的保密方法.期刊摘选A differential cryptanalysis of the iterated block cipher based on the new round function is presented.对基于此种新轮函数的一种迭代型分组密码进行了差分密码分析.期刊摘选The Foreign Office have been pushing us for months to get something on the cipher.好几个月来,外交部一直在催我们要从密码中了解到一些情况.辞典例句Rijndael encryption algorithm is the grouping variable length block cipher.Rijndael加密算法 是分组长度可变的分组密码.期刊摘选Cipher: Our free trial of kungfu has expired.我们的功夫程序免费试用版本已经过期了啊.期刊摘选In cryptography , a cipher produced by a composition of a number of substitution and transposition ciphers.密码学中, 由替代密码和置换密码结合使用而构成的一种密码.期刊摘选I couldn't cipher out his motives.我猜不出他的动机.《现代英汉综合大词典》Of course I could somehow read , write, and cipher; but that was all.当然,我还能写 、 能读、能算, 仅此而已.期刊摘选The block cipher remedies partially some flaws of the known chaotic cryptosystem.该算法弥补了已有混沌密码系统的一些固有缺陷.期刊摘选Encryption is defined as the conversion of data into a form called a cipher.加密的定义是数据转换成一种叫做密码的形式.期刊摘选It's a telegram in cipher.这是密码电报.《简明英汉词典》He's a figment, a cipher, jabberwocky.他是一个假象, 一个幻影, 一句空话.电影对白The paper revolves the cipher system, established and realizes one security practical information safe transmission model.本文围绕现代密码体制, 建立并实现了一个安全实用的一体化网络安全策略模型.期刊摘选A symbol used in secret writing; cipher or code.用于秘密书写的符号; 暗码或密码.期刊摘选Block cipher algorithms encrypt data in block units, rather than a single byte at a time.块密码算法以块为单位加密数据, 而不是逐个字节地加密数据.期刊摘选This hidden information can be plain text, cipher text, or even images.这些隐藏的信息可以使普通文本 、 密码文本或图像等.期刊摘选He's a mere cipher in the company.他在公司里是个无足轻重的小人物.《简明英汉词典》Somethingimportant was concealed in those lines of cipher.肯定有什么重要的东西藏在这些密文里面.期刊摘选All important plans were sent to the police in cipher.所有重要计划均以密码送往警方.《现代汉英综合大词典》a message in cipher密码信《牛津高阶英汉双解词典》收起实用场景例句英英释义Noun1. a message written in a secret code2. a mathematical element that when added to another number yields the same number3. a quantity of no importance;"it looked like nothing I had ever seen before""reduced to nil all the work we had done""we racked up a pathetic goose egg""it was all for naught""I didn't hear zilch about it"4. a person of no influence5. a secret method of writingVerb1. convert ordinary language into code;"We should encode the message for security reasons"2. make a mathematical calculation or computation收起英英释义同义词nothingnobodyshorthand行业词典数学密码 释义词态变化实用场景例句英英释义同义词行对称加密算法 - 廖雪峰的官方网站
对称加密算法 - 廖雪峰的官方网站
Index
廖雪峰的官方网站
Blog
Java教程
手写Spring
手写Tomcat
Makefile教程
Python教程
JavaScript教程
区块链教程
SQL教程
Git教程
文章
问答
More
Java教程
手写Spring
手写Tomcat
Makefile教程
Python教程
JavaScript教程
区块链教程
SQL教程
Git教程
文章
问答
Java教程
手写Spring
手写Tomcat
Makefile教程
Python教程
JavaScript教程
区块链教程
SQL教程
Git教程
文章
问答
Profile
Passkey
Sign Out
Sign In
English
简体中文
Index
Java教程
Java快速入门
Java简介
安装JDK
第一个Java程序
Java代码助手
使用IDE
使用IDE练习插件
Java程序基础
Java程序基本结构
变量和数据类型
整数运算
浮点数运算
布尔运算
字符和字符串
数组类型
流程控制
输入和输出
if判断
switch多重选择
while循环
do while循环
for循环
break和continue
数组操作
遍历数组
数组排序
多维数组
命令行参数
面向对象编程
面向对象基础
方法
构造方法
方法重载
继承
多态
抽象类
接口
静态字段和静态方法
包
作用域
内部类
classpath和jar
class版本
模块
Java核心类
字符串和编码
StringBuilder
StringJoiner
包装类型
JavaBean
枚举类
记录类
BigInteger
BigDecimal
常用工具类
异常处理
Java的异常
捕获异常
抛出异常
自定义异常
NullPointerException
使用断言
使用JDK Logging
使用Commons Logging
使用Log4j
使用SLF4J和Logback
反射
Class类
访问字段
调用方法
调用构造方法
获取继承关系
动态代理
注解
使用注解
定义注解
处理注解
泛型
什么是泛型
使用泛型
编写泛型
擦拭法
extends通配符
super通配符
泛型和反射
集合
Java集合简介
使用List
编写equals方法
使用Map
编写equals和hashCode
使用EnumMap
使用TreeMap
使用Properties
使用Set
使用Queue
使用PriorityQueue
使用Deque
使用Stack
使用Iterator
使用Collections
IO
File对象
InputStream
OutputStream
Filter模式
操作Zip
读取classpath资源
序列化
Reader
Writer
PrintStream和PrintWriter
使用Files
日期与时间
基本概念
Date和Calendar
LocalDateTime
ZonedDateTime
DateTimeFormatter
Instant
最佳实践
单元测试
编写JUnit测试
使用Fixture
异常测试
条件测试
参数化测试
正则表达式
正则表达式简介
匹配规则
复杂匹配规则
分组匹配
非贪婪匹配
搜索和替换
加密与安全
编码算法
哈希算法
BouncyCastle
Hmac算法
对称加密算法
口令加密算法
密钥交换算法
非对称加密算法
签名算法
数字证书
多线程
多线程基础
创建新线程
线程的状态
中断线程
守护线程
线程同步
同步方法
死锁
使用wait和notify
使用ReentrantLock
使用Condition
使用ReadWriteLock
使用StampedLock
使用Semaphore
使用Concurrent集合
使用Atomic
使用线程池
使用Future
使用CompletableFuture
使用ForkJoin
使用ThreadLocal
使用虚拟线程
Maven基础
Maven介绍
依赖管理
构建流程
使用插件
模块管理
使用mvnw
发布Artifact
网络编程
网络编程基础
TCP编程
UDP编程
发送Email
接收Email
HTTP编程
RMI远程调用
XML与JSON
XML简介
使用DOM
使用SAX
使用Jackson
使用JSON
JDBC编程
JDBC简介
JDBC查询
JDBC更新
JDBC事务
JDBC Batch
JDBC连接池
函数式编程
Lambda基础
方法引用
使用Stream
创建Stream
使用map
使用filter
使用reduce
输出集合
其他操作
设计模式
创建型模式
工厂方法
抽象工厂
生成器
原型
单例
结构型模式
适配器
桥接
组合
装饰器
外观
享元
代理
行为型模式
责任链
命令
解释器
迭代器
中介
备忘录
观察者
状态
策略
模板方法
访问者
Web开发
Web基础
Servlet入门
Servlet开发
Servlet进阶
重定向与转发
使用Session和Cookie
JSP开发
MVC开发
MVC高级开发
使用Filter
修改请求
修改响应
使用Listener
部署
Spring开发
IoC容器
IoC原理
装配Bean
使用Annotation配置
定制Bean
使用Resource
注入配置
使用条件装配
使用AOP
装配AOP
使用注解装配AOP
AOP避坑指南
访问数据库
使用JDBC
使用声明式事务
使用DAO
集成Hibernate
集成JPA
集成MyBatis
设计ORM
开发Web应用
使用Spring MVC
使用REST
集成Filter
使用Interceptor
处理CORS
国际化
异步处理
使用WebSocket
集成第三方组件
集成JavaMail
集成JMS
使用Scheduler
集成JMX
Spring Boot开发
第一个Spring Boot应用
使用开发者工具
打包Spring Boot应用
瘦身Spring Boot应用
使用Actuator
使用Profiles
使用Conditional
加载配置文件
禁用自动配置
添加Filter
集成第三方组件
集成Open API
访问Redis
集成Artemis
集成RabbitMQ
集成Kafka
Spring Cloud开发
项目架构设计
搭建项目框架
设计交易引擎
设计资产系统
设计订单系统
设计撮合引擎
设计清算系统
完成交易引擎
设计定序系统
设计API系统
设计行情系统
设计推送系统
编写UI
项目总结
关注公众号不定期领红包:
加入知识星球社群:
关注微博获取实时动态:
对称加密算法
Last updated: ...
/
Reads: 1333579
Edit
对称加密算法就是传统的用一个密码进行加密和解密。例如,我们常用的WinZIP和WinRAR对压缩包的加密和解密,就是使用对称加密算法:
从程序的角度看,所谓加密,就是这样一个函数,它接收密码和明文,然后输出密文:
secret = encrypt(key, message);
而解密则相反,它接收密码和密文,然后输出明文:
plain = decrypt(key, secret);
在软件开发中,常用的对称加密算法有:
算法密钥长度工作模式填充模式
DES56/64ECB/CBC/PCBC/CTR/...NoPadding/PKCS5Padding/...
AES128/192/256ECB/CBC/PCBC/CTR/...NoPadding/PKCS5Padding/PKCS7Padding/...
IDEA128ECBPKCS5Padding/PKCS7Padding/...
密钥长度直接决定加密强度,而工作模式和填充模式可以看成是对称加密算法的参数和格式选择。Java标准库提供的算法实现并不包括所有的工作模式和所有填充模式,但是通常我们只需要挑选常用的使用就可以了。
最后注意,DES算法由于密钥过短,可以在短时间内被暴力破解,所以现在已经不安全了。
使用AES加密
AES算法是目前应用最广泛的加密算法。我们先用ECB模式加密并解密:
import java.security.*;
import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.*;
public class Main {
public static void main(String[] args) throws Exception {
// 原文:
String message = "Hello, world!";
System.out.println("Message: " + message);
// 128位密钥 = 16 bytes Key:
byte[] key = "1234567890abcdef".getBytes("UTF-8");
// 加密:
byte[] data = message.getBytes("UTF-8");
byte[] encrypted = encrypt(key, data);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
// 解密:
byte[] decrypted = decrypt(key, encrypted);
System.out.println("Decrypted: " + new String(decrypted, "UTF-8"));
}
// 加密:
public static byte[] encrypt(byte[] key, byte[] input) throws GeneralSecurityException {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKey keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
return cipher.doFinal(input);
}
// 解密:
public static byte[] decrypt(byte[] key, byte[] input) throws GeneralSecurityException {
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKey keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
return cipher.doFinal(input);
}
}
Java标准库提供的对称加密接口非常简单,使用时按以下步骤编写代码:
根据算法名称/工作模式/填充模式获取Cipher实例;
根据算法名称初始化一个SecretKey实例,密钥必须是指定长度;
使用SecretKey初始化Cipher实例,并设置加密或解密模式;
传入明文或密文,获得密文或明文。
ECB模式是最简单的AES加密模式,它只需要一个固定长度的密钥,固定的明文会生成固定的密文,这种一对一的加密方式会导致安全性降低,更好的方式是通过CBC模式,它需要一个随机数作为IV参数,这样对于同一份明文,每次生成的密文都不同:
import java.security.*;
import java.util.Base64;
import javax.crypto.*;
import javax.crypto.spec.*;
----
public class Main {
public static void main(String[] args) throws Exception {
// 原文:
String message = "Hello, world!";
System.out.println("Message: " + message);
// 256位密钥 = 32 bytes Key:
byte[] key = "1234567890abcdef1234567890abcdef".getBytes("UTF-8");
// 加密:
byte[] data = message.getBytes("UTF-8");
byte[] encrypted = encrypt(key, data);
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encrypted));
// 解密:
byte[] decrypted = decrypt(key, encrypted);
System.out.println("Decrypted: " + new String(decrypted, "UTF-8"));
}
// 加密:
public static byte[] encrypt(byte[] key, byte[] input) throws GeneralSecurityException {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
// CBC模式需要生成一个16 bytes的initialization vector:
SecureRandom sr = SecureRandom.getInstanceStrong();
byte[] iv = sr.generateSeed(16);
IvParameterSpec ivps = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);
byte[] data = cipher.doFinal(input);
// IV不需要保密,把IV和密文一起返回:
return join(iv, data);
}
// 解密:
public static byte[] decrypt(byte[] key, byte[] input) throws GeneralSecurityException {
// 把input分割成IV和密文:
byte[] iv = new byte[16];
byte[] data = new byte[input.length - 16];
System.arraycopy(input, 0, iv, 0, 16);
System.arraycopy(input, 16, data, 0, data.length);
// 解密:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivps = new IvParameterSpec(iv);
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivps);
return cipher.doFinal(data);
}
public static byte[] join(byte[] bs1, byte[] bs2) {
byte[] r = new byte[bs1.length + bs2.length];
System.arraycopy(bs1, 0, r, 0, bs1.length);
System.arraycopy(bs2, 0, r, bs1.length, bs2.length);
return r;
}
}
在CBC模式下,需要一个随机生成的16字节IV参数,必须使用SecureRandom生成。因为多了一个IvParameterSpec实例,因此,初始化方法需要调用Cipher的一个重载方法并传入IvParameterSpec。
观察输出,可以发现每次生成的IV不同,密文也不同。
小结
对称加密算法使用同一个密钥进行加密和解密,常用算法有DES、AES和IDEA等;
密钥长度由算法设计决定,AES的密钥长度是128/192/256位;
使用对称加密算法需要指定算法名称、工作模式和填充模式。
Comments
Make a comment
Sign in to
make a comment
Index
Java教程
Java快速入门
Java简介
安装JDK
第一个Java程序
Java代码助手
使用IDE
使用IDE练习插件
Java程序基础
Java程序基本结构
变量和数据类型
整数运算
浮点数运算
布尔运算
字符和字符串
数组类型
流程控制
输入和输出
if判断
switch多重选择
while循环
do while循环
for循环
break和continue
数组操作
遍历数组
数组排序
多维数组
命令行参数
面向对象编程
面向对象基础
方法
构造方法
方法重载
继承
多态
抽象类
接口
静态字段和静态方法
包
作用域
内部类
classpath和jar
class版本
模块
Java核心类
字符串和编码
StringBuilder
StringJoiner
包装类型
JavaBean
枚举类
记录类
BigInteger
BigDecimal
常用工具类
异常处理
Java的异常
捕获异常
抛出异常
自定义异常
NullPointerException
使用断言
使用JDK Logging
使用Commons Logging
使用Log4j
使用SLF4J和Logback
反射
Class类
访问字段
调用方法
调用构造方法
获取继承关系
动态代理
注解
使用注解
定义注解
处理注解
泛型
什么是泛型
使用泛型
编写泛型
擦拭法
extends通配符
super通配符
泛型和反射
集合
Java集合简介
使用List
编写equals方法
使用Map
编写equals和hashCode
使用EnumMap
使用TreeMap
使用Properties
使用Set
使用Queue
使用PriorityQueue
使用Deque
使用Stack
使用Iterator
使用Collections
IO
File对象
InputStream
OutputStream
Filter模式
操作Zip
读取classpath资源
序列化
Reader
Writer
PrintStream和PrintWriter
使用Files
日期与时间
基本概念
Date和Calendar
LocalDateTime
ZonedDateTime
DateTimeFormatter
Instant
最佳实践
单元测试
编写JUnit测试
使用Fixture
异常测试
条件测试
参数化测试
正则表达式
正则表达式简介
匹配规则
复杂匹配规则
分组匹配
非贪婪匹配
搜索和替换
加密与安全
编码算法
哈希算法
BouncyCastle
Hmac算法
对称加密算法
口令加密算法
密钥交换算法
非对称加密算法
签名算法
数字证书
多线程
多线程基础
创建新线程
线程的状态
中断线程
守护线程
线程同步
同步方法
死锁
使用wait和notify
使用ReentrantLock
使用Condition
使用ReadWriteLock
使用StampedLock
使用Semaphore
使用Concurrent集合
使用Atomic
使用线程池
使用Future
使用CompletableFuture
使用ForkJoin
使用ThreadLocal
使用虚拟线程
Maven基础
Maven介绍
依赖管理
构建流程
使用插件
模块管理
使用mvnw
发布Artifact
网络编程
网络编程基础
TCP编程
UDP编程
发送Email
接收Email
HTTP编程
RMI远程调用
XML与JSON
XML简介
使用DOM
使用SAX
使用Jackson
使用JSON
JDBC编程
JDBC简介
JDBC查询
JDBC更新
JDBC事务
JDBC Batch
JDBC连接池
函数式编程
Lambda基础
方法引用
使用Stream
创建Stream
使用map
使用filter
使用reduce
输出集合
其他操作
设计模式
创建型模式
工厂方法
抽象工厂
生成器
原型
单例
结构型模式
适配器
桥接
组合
装饰器
外观
享元
代理
行为型模式
责任链
命令
解释器
迭代器
中介
备忘录
观察者
状态
策略
模板方法
访问者
Web开发
Web基础
Servlet入门
Servlet开发
Servlet进阶
重定向与转发
使用Session和Cookie
JSP开发
MVC开发
MVC高级开发
使用Filter
修改请求
修改响应
使用Listener
部署
Spring开发
IoC容器
IoC原理
装配Bean
使用Annotation配置
定制Bean
使用Resource
注入配置
使用条件装配
使用AOP
装配AOP
使用注解装配AOP
AOP避坑指南
访问数据库
使用JDBC
使用声明式事务
使用DAO
集成Hibernate
集成JPA
集成MyBatis
设计ORM
开发Web应用
使用Spring MVC
使用REST
集成Filter
使用Interceptor
处理CORS
国际化
异步处理
使用WebSocket
集成第三方组件
集成JavaMail
集成JMS
使用Scheduler
集成JMX
Spring Boot开发
第一个Spring Boot应用
使用开发者工具
打包Spring Boot应用
瘦身Spring Boot应用
使用Actuator
使用Profiles
使用Conditional
加载配置文件
禁用自动配置
添加Filter
集成第三方组件
集成Open API
访问Redis
集成Artemis
集成RabbitMQ
集成Kafka
Spring Cloud开发
项目架构设计
搭建项目框架
设计交易引擎
设计资产系统
设计订单系统
设计撮合引擎
设计清算系统
完成交易引擎
设计定序系统
设计API系统
设计行情系统
设计推送系统
编写UI
项目总结
廖雪峰的官方网站
©Copyright 2019-2021
Powered by iTranswarp
Feedback
License
浅谈常见的七种加密算法及实现 - 知乎
浅谈常见的七种加密算法及实现 - 知乎首发于360linker切换模式写文章登录/注册浅谈常见的七种加密算法及实现360linker前言数字签名、信息加密 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、oauth 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 签名加密算法 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。正文1. 数字签名数字签名,简单来说就是通过提供 可鉴别 的 数字信息 验证 自身身份 的一种方式。一套 数字签名 通常定义两种 互补 的运算,一个用于 签名,另一个用于 验证。分别由 发送者 持有能够 代表自己身份 的 私钥 (私钥不可泄露),由 接受者 持有与私钥对应的 公钥 ,能够在 接受 到来自发送者信息时用于 验证 其身份。注意:图中 加密过程 有别于 公钥加密,更多 介绍戳这里。签名 最根本的用途是要能够唯一 证明发送方的身份,防止 中间人攻击、CSRF 跨域身份伪造。基于这一点在诸如 设备认证、用户认证、第三方认证 等认证体系中都会使用到 签名算法 (彼此的实现方式可能会有差异)。2. 加密和解密2.1. 加密数据加密 的基本过程,就是对原来为 明文 的文件或数据按 某种算法 进行处理,使其成为 不可读 的一段代码,通常称为 “密文”。通过这样的途径,来达到 保护数据 不被 非法人窃取、阅读的目的。2.2. 解密加密 的 逆过程 为 解密,即将该 编码信息 转化为其 原来数据 的过程。3. 对称加密和非对称加密加密算法分 对称加密 和 非对称加密,其中对称加密算法的加密与解密 密钥相同,非对称加密算法的加密密钥与解密 密钥不同,此外,还有一类 不需要密钥 的 散列算法。常见的 对称加密 算法主要有 DES、3DES、AES 等,常见的 非对称算法 主要有 RSA、DSA 等,散列算法 主要有 SHA-1、MD5 等。3.1. 对称加密对称加密算法 是应用较早的加密算法,又称为 共享密钥加密算法。在 对称加密算法 中,使用的密钥只有一个,发送 和 接收 双方都使用这个密钥对数据进行 加密 和 解密。这就要求加密和解密方事先都必须知道加密的密钥。数据加密过程:在对称加密算法中,数据发送方 将 明文 (原始数据) 和 加密密钥 一起经过特殊 加密处理,生成复杂的 加密密文 进行发送。数据解密过程:数据接收方 收到密文后,若想读取原数据,则需要使用 加密使用的密钥 及相同算法的 逆算法 对加密的密文进行解密,才能使其恢复成 可读明文。3.2. 非对称加密非对称加密算法,又称为 公开密钥加密算法。它需要两个密钥,一个称为 公开密钥 (public key),即 公钥,另一个称为 私有密钥 (private key),即 私钥。因为 加密 和 解密 使用的是两个不同的密钥,所以这种算法称为 非对称加密算法。如果使用 公钥 对数据 进行加密,只有用对应的 私钥 才能 进行解密。如果使用 私钥 对数据 进行加密,只有用对应的 公钥 才能 进行解密。例子:甲方生成 一对密钥 并将其中的一把作为 公钥 向其它人公开,得到该公钥的 乙方 使用该密钥对机密信息 进行加密 后再发送给甲方,甲方再使用自己保存的另一把 专用密钥 (私钥),对 加密 后的信息 进行解密。4. 常见的签名加密算法4.1. MD5算法MD5 用的是 哈希函数,它的典型应用是对一段信息产生 信息摘要,以 防止被篡改。严格来说,MD5 不是一种 加密算法 而是 摘要算法。无论是多长的输入,MD5 都会输出长度为 128bits 的一个串 (通常用 16 进制 表示为 32 个字符)。public static final byte[] computeMD5(byte[] content) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return md5.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}4.2. SHA1算法SHA1 是和 MD5 一样流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更强。对于长度小于 2 ^ 64 位的消息,SHA1 会产生一个 160 位的 消息摘要。基于 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被应用在检查 文件完整性 以及 数字签名 等场景。public static byte[] computeSHA1(byte[] content) {
try {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
return sha1.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}4.3. HMAC算法HMAC 是密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用 哈希算法 (MD5、SHA1 等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为 输出。HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是 无法计算 出正确的 散列值的,这样就可以 防止数据被篡改。package net.pocrd.util;
import net.pocrd.annotation.NotThreadSafe;
import net.pocrd.define.ConstField;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Arrays;
@NotThreadSafe
public class HMacHelper {
private static final Logger logger = LoggerFactory.getLogger(HMacHelper.class);
private Mac mac;
/**
* MAC算法可选以下多种算法
* HmacMD5/HmacSHA1/HmacSHA256/HmacSHA384/HmacSHA512
*/
private static final String KEY_MAC = "HmacMD5";
public HMacHelper(String key) {
try {
SecretKey secretKey = new SecretKeySpec(key.getBytes(ConstField.UTF8), KEY_MAC);
mac = Mac.getInstance(secretKey.getAlgorithm());
mac.init(secretKey);
} catch (Exception e) {
logger.error("create hmac helper failed.", e);
}
}
public byte[] sign(byte[] content) {
return mac.doFinal(content);
}
public boolean verify(byte[] signature, byte[] content) {
try {
byte[] result = mac.doFinal(content);
return Arrays.equals(signature, result);
} catch (Exception e) {
logger.error("verify sig failed.", e);
}
return false;
}
}测试结论:HMAC 算法实例在 多线程环境 下是 不安全的。但是需要在 多线程访问 时,进行同步的辅助类,使用 ThreadLocal 为 每个线程缓存 一个实例可以避免进行锁操作。4.4. AES/DES/3DES算法AES、DES、3DES 都是 对称 的 块加密算法,加解密 的过程是 可逆的。常用的有 AES128、AES192、AES256 (默认安装的 JDK 尚不支持 AES256,需要安装对应的 jce 补丁进行升级 jce1.7,jce1.8)。4.4.1. DES算法DES 加密算法是一种 分组密码,以 64 位为 分组对数据 加密,它的 密钥长度 是 56 位,加密解密 用 同一算法。DES 加密算法是对 密钥 进行保密,而 公开算法,包括加密和解密算法。这样,只有掌握了和发送方 相同密钥 的人才能解读由 DES加密算法加密的密文数据。因此,破译 DES 加密算法实际上就是 搜索密钥的编码。对于 56 位长度的 密钥 来说,如果用 穷举法 来进行搜索的话,其运算次数为 2 ^ 56 次。4.4.2. 3DES算法是基于 DES 的 对称算法,对 一块数据 用 三个不同的密钥 进行 三次加密,强度更高。4.4.3. AES算法AES 加密算法是密码学中的 高级加密标准,该加密算法采用 对称分组密码体制,密钥长度的最少支持为 128 位、 192 位、256 位,分组长度 128 位,算法应易于各种硬件和软件实现。这种加密算法是美国联邦政府采用的 区块加密标准。AES 本身就是为了取代 DES 的,AES 具有更好的 安全性、效率 和 灵活性。import net.pocrd.annotation.NotThreadSafe;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
@NotThreadSafe
public class AesHelper {
private SecretKeySpec keySpec;
private IvParameterSpec iv;
public AesHelper(byte[] aesKey, byte[] iv) {
if (aesKey == null || aesKey.length < 16 || (iv != null && iv.length < 16)) {
throw new RuntimeException("错误的初始密钥");
}
if (iv == null) {
iv = Md5Util.compute(aesKey);
}
keySpec = new SecretKeySpec(aesKey, "AES");
this.iv = new IvParameterSpec(iv);
}
public AesHelper(byte[] aesKey) {
if (aesKey == null || aesKey.length < 16) {
throw new RuntimeException("错误的初始密钥");
}
keySpec = new SecretKeySpec(aesKey, "AES");
this.iv = new IvParameterSpec(Md5Util.compute(aesKey));
}
public byte[] encrypt(byte[] data) {
byte[] result = null;
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES/CFB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec, iv);
result = cipher.doFinal(data);
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
public byte[] decrypt(byte[] secret) {
byte[] result = null;
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES/CFB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, keySpec, iv);
result = cipher.doFinal(secret);
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
public static byte[] randomKey(int size) {
byte[] result = null;
try {
KeyGenerator gen = KeyGenerator.getInstance("AES");
gen.init(size, new SecureRandom());
result = gen.generateKey().getEncoded();
} catch (Exception e) {
throw new RuntimeException(e);
}
return result;
}
}4.5. RSA算法RSA 加密算法是目前最有影响力的 公钥加密算法,并且被普遍认为是目前 最优秀的公钥方案 之一。RSA 是第一个能同时用于 加密 和 数字签名 的算法,它能够 抵抗 到目前为止已知的 所有密码攻击,已被 ISO 推荐为公钥数据加密标准。RSA 加密算法 基于一个十分简单的数论事实:将两个大 素数 相乘十分容易,但想要对其乘积进行 因式分解 却极其困难,因此可以将 乘积 公开作为 加密密钥。import net.pocrd.annotation.NotThreadSafe;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.Security;
import java.security.Signature;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
@NotThreadSafe
public class RsaHelper {
private static final Logger logger = LoggerFactory.getLogger(RsaHelper.class);
private RSAPublicKey publicKey;
private RSAPrivateCrtKey privateKey;
static {
Security.addProvider(new BouncyCastleProvider()); //使用bouncycastle作为加密算法实现
}
public RsaHelper(String publicKey, String privateKey) {
this(Base64Util.decode(publicKey), Base64Util.decode(privateKey));
}
public RsaHelper(byte[] publicKey, byte[] privateKey) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
if (publicKey != null && publicKey.length > 0) {
this.publicKey = (RSAPublicKey)keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));
}
if (privateKey != null && privateKey.length > 0) {
this.privateKey = (RSAPrivateCrtKey)keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKey));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public RsaHelper(String publicKey) {
this(Base64Util.decode(publicKey));
}
public RsaHelper(byte[] publicKey) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
if (publicKey != null && publicKey.length > 0) {
this.publicKey = (RSAPublicKey)keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public byte[] encrypt(byte[] content) {
if (publicKey == null) {
throw new RuntimeException("public key is null.");
}
if (content == null) {
return null;
}
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
int size = publicKey.getModulus().bitLength() / 8 - 11;
ByteArrayOutputStream baos = new ByteArrayOutputStream((content.length + size - 1) / size * (size + 11));
int left = 0;
for (int i = 0; i < content.length; ) {
left = content.length - i;
if (left > size) {
cipher.update(content, i, size);
i += size;
} else {
cipher.update(content, i, left);
i += left;
}
baos.write(cipher.doFinal());
}
return baos.toByteArray();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public byte[] decrypt(byte[] secret) {
if (privateKey == null) {
throw new RuntimeException("private key is null.");
}
if (secret == null) {
return null;
}
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
int size = privateKey.getModulus().bitLength() / 8;
ByteArrayOutputStream baos = new ByteArrayOutputStream((secret.length + size - 12) / (size - 11) * size);
int left = 0;
for (int i = 0; i < secret.length; ) {
left = secret.length - i;
if (left > size) {
cipher.update(secret, i, size);
i += size;
} else {
cipher.update(secret, i, left);
i += left;
}
baos.write(cipher.doFinal());
}
return baos.toByteArray();
} catch (Exception e) {
logger.error("rsa decrypt failed.", e);
}
return null;
}
public byte[] sign(byte[] content) {
if (privateKey == null) {
throw new RuntimeException("private key is null.");
}
if (content == null) {
return null;
}
try {
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initSign(privateKey);
signature.update(content);
return signature.sign();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public boolean verify(byte[] sign, byte[] content) {
if (publicKey == null) {
throw new RuntimeException("public key is null.");
}
if (sign == null || content == null) {
return false;
}
try {
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initVerify(publicKey);
signature.update(content);
return signature.verify(sign);
} catch (Exception e) {
logger.error("rsa verify failed.", e);
}
return false;
}
}4.6. ECC算法ECC 也是一种 非对称加密算法,主要优势是在某些情况下,它比其他的方法使用 更小的密钥,比如 RSA 加密算法,提供 相当的或更高等级 的安全级别。不过一个缺点是 加密和解密操作 的实现比其他机制 时间长 (相比 RSA 算法,该算法对 CPU 消耗严重)。import net.pocrd.annotation.NotThreadSafe;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey;
import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.Security;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
@NotThreadSafe
public class EccHelper {
private static final Logger logger = LoggerFactory.getLogger(EccHelper.class);
private static final int SIZE = 4096;
private BCECPublicKey publicKey;
private BCECPrivateKey privateKey;
static {
Security.addProvider(new BouncyCastleProvider());
}
public EccHelper(String publicKey, String privateKey) {
this(Base64Util.decode(publicKey), Base64Util.decode(privateKey));
}
public EccHelper(byte[] publicKey, byte[] privateKey) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("EC", "BC");
if (publicKey != null && publicKey.length > 0) {
this.publicKey = (BCECPublicKey)keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));
}
if (privateKey != null && privateKey.length > 0) {
this.privateKey = (BCECPrivateKey)keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKey));
}
} catch (ClassCastException e) {
throw new RuntimeException("", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public EccHelper(String publicKey) {
this(Base64Util.decode(publicKey));
}
public EccHelper(byte[] publicKey) {
try {
KeyFactory keyFactory = KeyFactory.getInstance("EC", "BC");
if (publicKey != null && publicKey.length > 0) {
this.publicKey = (BCECPublicKey)keyFactory.generatePublic(new X509EncodedKeySpec(publicKey));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public byte[] encrypt(byte[] content) {
if (publicKey == null) {
throw new RuntimeException("public key is null.");
}
try {
Cipher cipher = Cipher.getInstance("ECIES", "BC");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
int size = SIZE;
ByteArrayOutputStream baos = new ByteArrayOutputStream((content.length + size - 1) / size * (size + 45));
int left = 0;
for (int i = 0; i < content.length; ) {
left = content.length - i;
if (left > size) {
cipher.update(content, i, size);
i += size;
} else {
cipher.update(content, i, left);
i += left;
}
baos.write(cipher.doFinal());
}
return baos.toByteArray();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public byte[] decrypt(byte[] secret) {
if (privateKey == null) {
throw new RuntimeException("private key is null.");
}
try {
Cipher cipher = Cipher.getInstance("ECIES", "BC");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
int size = SIZE + 45;
ByteArrayOutputStream baos = new ByteArrayOutputStream((secret.length + size + 44) / (size + 45) * size);
int left = 0;
for (int i = 0; i < secret.length; ) {
left = secret.length - i;
if (left > size) {
cipher.update(secret, i, size);
i += size;
} else {
cipher.update(secret, i, left);
i += left;
}
baos.write(cipher.doFinal());
}
return baos.toByteArray();
} catch (Exception e) {
logger.error("ecc decrypt failed.", e);
}
return null;
}
public byte[] sign(byte[] content) {
if (privateKey == null) {
throw new RuntimeException("private key is null.");
}
try {
Signature signature = Signature.getInstance("SHA1withECDSA", "BC");
signature.initSign(privateKey);
signature.update(content);
return signature.sign();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public boolean verify(byte[] sign, byte[] content) {
if (publicKey == null) {
throw new RuntimeException("public key is null.");
}
try {
Signature signature = Signature.getInstance("SHA1withECDSA", "BC");
signature.initVerify(publicKey);
signature.update(content);
return signature.verify(sign);
} catch (Exception e) {
logger.error("ecc verify failed.", e);
}
return false;
}
}5. 各种加密算法对比5.1. 散列算法比较5.2. 对称加密算法比较5.3. 非对称加密算法比较5.4. 对称算法与非对称加密算法5.4.1. 对称算法密钥管理:比较难,不适合互联网,一般用于内部系统安全性:中加密速度:快好 几个数量级 (软件加解密速度至少快 100 倍,每秒可以加解密数 M 比特 数据),适合大数据量的加解密处理5.4.2. 非对称算法密钥管理:密钥容易管理安全性:高加密速度:比较慢,适合 小数据量 加解密或数据签名小结本文介绍了 数字签名,加密和解密,对称加密和非对称加密,然后详细介绍了 MD5,SHA-1,HMAC,DES/AES,RSA 和 ECC 这几种加密算法和代码示例。发布于 2021-01-26 13:39加密算法非对称式加密数据加密赞同 1995 条评论分享喜欢收藏申请转载文章被以下专栏收录360linker IT热点技术讲解,编程技巧,职场
cipher(词语)_百度百科
er(词语)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心cipher是一个多义词,请在下列义项上选择浏览(共3个义项)添加义项收藏查看我的收藏0有用+10cipher播报讨论上传视频词语cipher有名词和动词两种词性。还有作品的意思,来源于日本漫画。DOS命令多适用于文件。PAZ是 cipher申引出来的。中文名cipher外文名cipher解释1密码;密码文件;密码检索本解释2无足轻重的人;无价值的东西特 点(用算术)计算相 关皇牌空战0的主角目录1单词2DOS命令3作品单词播报编辑cipherKK: []DJ: []n.1. 密码;密码文件;密码检索本[C][U]a message written in cipher用密码写成的信2. 零(即0)[C]3. 阿拉伯数字[C]4. 无足轻重的人;无价值的东西[C]He's a mere cipher in the company.他在公司里是个无足轻重的人物。5. 花押字[C]vi.1. 【罕】做算术2. 使用密码vt.1. 【罕】(用算术)计算cipher a document将文件译成密码2. 将...译成密码,用暗号表达DOS命令播报编辑显示或更改 NTFS 分区上的目录[文件]的加密CIPHER [/E | /D] [/S:directory] [/A] [/F] [/Q] [/H] [pathn]CIPHER /KCIPHER /R:filenameCIPHER /U [/N]CIPHER /W:directoryCIPHER /X[:efsfile] [filename]/A 在文件及目录上操作。如果父目录没有加密,当加密文件被修改后,它可能被解密。建议您给此文件和父目录加密。/D 将指定的目录解密。会标记目录,这样随后添加的文件就不会被加密。/E 将指定的目录加密。会标记目录,这样随后添加的文件就会被加密。/F 强制在所有指定的对象上进行加密操作,即使这些对象已经被加密。默认地会跳过已经加密的对象。/H 显示带隐藏或系统属性的文件。在默认方式下,会忽略这些文件。/I 即使发生错误也继续执行指定的操作。在默认方式下,CIPHER 在遇到错误时会停止。/K 为运行 CIPHER 的用户创建新的加密密钥。如果选择了此选项,会忽略所有其他选项。/N 此选项只能与 /U 同时使用。这将阻止更新密钥。此选项用于查找本地磁盘上所有加密文件。/Q 只报告最重要的信息。/R 生成一个 EFS 恢复代理密钥和证书,然后将它们写入一个.PFX 文件(包含证书和私钥)和一个 .CER 文件(只包含证书)。管理员可以将 .CER 的内容添加到 EFS 恢复策略,从而为用户创建恢复代理并导入 .PFX 来恢复单独文件。/S 在已知目录和所有子目录执行指定的操作。/U 尝试包括本地磁盘上所有加密的文件。如果用户文件加密密钥或恢复代理的密钥改变,这会将其更新为当前的密钥。除了 /N 外,此选项不能与其他选项一起使用。/W 从整个卷上所有没有使用的磁盘空间删除数据。如果选择了此选项,会忽略其他选项。指定的目录可以位于本地卷上的任意位置。如果它是另一个卷上一个目录的装入点,此卷上的数据将被删除。/X 将 EFS 证书和密钥备份成文件的文件名。如果提供了 EFS文件,将会备份当前用户的、用于加密此文件的证书。否则,将会备份用户当前的 EFS 证书和密钥。directory 一个目录路径。filename 没有扩展名的一个文件名。pathname 指定一个模式、文件或目录。efsfile 一个加密的文件路径。不用参数时,CIPHER 显示当前目录和它包含文件的加密状态。您可以使用几个目录名和通配符。多个参数之间必须有空格。作品播报编辑CIPHER日本漫画家成田美名子的作品<流密码 Stream Cipher - 知乎
流密码 Stream Cipher - 知乎切换模式写文章登录/注册流密码 Stream CipherPeter 王广忠程序员,专业区块链讲解员跟块密码一样,本文的主角流密码,Stream Cipher ,也是一种对称加密方法,加密和解密用的是同一个密钥。Cipher 翻译成密码不是特别精确,精确的来说,一个 Cipher 是指一套加密解密算法。基本原理先来宏观的介绍一下流密码的工作原理,来避开细节,形成一个大致的概念。块密码的思路是把信息分成多个小块去逐一加密。流密码把信息看成二进制数据流,基本工作原理是把信息中的每一位跟密钥流的每一位进行运算来获得密文。下面来详细解释一下这句话。首先,流密码也有一个密钥,常见的是128位,但是加密和解密的时候却不是直接使用密钥,而是使用密钥流,术语叫 keystream 。从密钥获得密钥流的过程,就是一个伪随机数生成过程。把真随机数的密钥做种子,去生成伪随机数作为密钥流。加密时候需要用到的密钥流长度要和信息流的长度相等,密钥流中的每一位和相同位置的信息流的一位,进行异或运算,就得到的密文。流密码既可以加密固定大小的数据,例如一个硬盘上的文件,也可以去加密数据流,例如电话语音。而用块密码去加密长度未知的数据流就很不合理。例如,如果块密码指定的块大小是128比特,而网络发送过来的是数据流,流数据一下子只传递了32比特过来,那么加密的时候,这个块就不得不出现很多填充数据了。而使用流密码加密数据流就没有这个问题。解密过程,把密文和密钥流传递给解密算法即可。这就是流密码的基本工作原理了。技术细节使用流密码还有一些要注意的技术细节。理想情况下,我们认为密钥流的长度是无限的,于是可以加密的信息流的长度就任意了的。但是,因为伪随机数是有周期的,超出周期长度后之后,密钥流就会出现可识别的规律,继续使用就不安全了。所以加密时,信息的长度不能大于伪随机数的周期。实际中的算法,周期都是足够长的,对加密过程不会产生实际影响。另外,生成密钥流的方式主要由两种,一种是跟信息本身完全无关,一种是跟信息加密后得到的密文有相关性的,具体细节可以参考维基百科的介绍。常见的使用流密码的加密协议有 RC4 ,Salsa20 ,和 ChaCha 等。和 One Time Pad 的差别如果你听说过一次性密码本 One Time Pad 的话,就会觉得流密码的思路跟 One Time Pad 是很类似的。没错,但是二者的区别也是比较明显的。因为流密码的密钥流本身不是真随机数,而是伪随机数。而 One Time Pad 是真随机数,而且使用一次即废弃,所以拥有最高的安全性。流密码的安全性肯定要低一些。但是,流密码是有很高的实用性的。One Time Pad 本身在互联网上是没有实用性的,因为秘钥至少要跟信息一样长,不能在互联网上共享。流密码使用的秘钥一般是很短的,常见的是128位,这这样的秘钥可以通过秘钥交换算法来在互联网上进行共享。这就是二者的差别。总结最后总结一下。流密码的原理是用伪随机数做密码流去加密信息的方法,信息被看做是一个二进制流。流密码的工作原理类似一次性密码本,只可以密码流不是真随机数,所以安全性比一次性密码本低。参考:https://www.techopedia.com/definition/16160/stream-cipherhttps://ctf101.org/cryptography/what-are-stream-ciphers/https://en.wikipedia.org/wiki/Stream_cipher发布于 2019-08-06 21:35比特币 (Bitcoin)赞同 14添加评论分享喜欢收藏申请