bitpie安装官网下载|cipher

作者: bitpie安装官网下载
2024-03-07 17:51:55

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:

org.apache.commons

commons-collections4

4.1

要么

&l

Collectors.toMap报错 :Duplicate key

乐乐的博客

04-20

6035

第一种写法:使用Collectors.toMap的方法,如果key重复会直接报错

第二种写法: 使用mergeFunction参数,可以取重复的key中的第一个或最后一个

List list = new ArrayList<>();

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 的详细信息

目录

退出焦点模式

使用英语阅读

保存

目录

使用英语阅读

保存

打印

Twitter

LinkedIn

Facebook

电子邮件

目录

cipher

项目

04/12/2023

8 个参与者

反馈

本文内容

显示或更改 NTFS 卷上的目录和文件的加密。 如果不带参数使用,cipher 将显示当前目录及其所包含任何文件的加密状态。

语法

cipher [/e | /d | /c] [/s:] [/b] [/h] [pathname [...]]

cipher /k

cipher /r: [/smartcard]

cipher /u [/n]

cipher /w:

cipher /x[:efsfile] [filename]

cipher /y

cipher /adduser [/certhash: | /certfile:] [/s:directory] [/b] [/h] [pathname [...]]

cipher /removeuser /certhash: [/s:] [/b] [/h] [ [...]]

cipher /rekey [pathname [...]]

参数

参数

说明

/b

如果遇到错误,则中止。 默认情况下,即使遇到错误,cipher 也会继续运行。

/c

显示有关加密文件的信息。

/d

解密指定的文件或目录。

/e

加密指定的文件或目录。 对目录进行标记,以便以后添加的文件将被加密。

/h

显示具有隐藏属性或系统属性的文件。 默认情况下,不对这些文件进行加密或解密。

/k

创建用于加密文件系统 (EFS) 文件的新证书和密钥。 如果指定了 /k 参数,则忽略所有其他参数。

/r: [/smartcard]

生成 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

Facebook

Twitter

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)

Print

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

Facebook

Twitter

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号 京公网安备110000020000

cipher是什么意思_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加密算法非对称式加密数据加密​赞同 199​​5 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录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日本漫画家成田美名子的作品<>的主角之一.中文的翻译版本叫做<<双星记>>.CIPHER是书中的主角之一. 男性, 美国电影电视名星. CIPHER是他的艺名, 真名叫做 Roy. Long.游戏:皇牌空战0的主角,既玩家的代号,座机:F-15CCipher是在《合金装备》系列中,Major Zero使用“哲学家的遗产”扩张起来的情报组织名称,通过“哲学家的遗产”Cipher组织迅速的扎根于美国国家机器的各个角落。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

流密码 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​​添加评论​分享​喜欢​收藏​申请