Java中DESKeySpec类
此类位于 javax.crypto.spec 包下。声明如下:
public class DESKeySpec extends Object implements KeySpec
此类指定一个 DES 密钥。
KeySpec是一个接口,用来组成加密密钥的密钥内容的(透明)规范。如果密钥存储在硬件设备上,则其规范可以包含有助于标识该设备上的密钥的信息。
用特定于算法的方法或独立于算法的编码格式(例如,ASN.1)可以指定密钥。例如,DSA 专用密钥可以由其组件 x、p、q 和 g 指定(请参见 DSAPrivateKeySpec),或使用其 DER 编码指定(请参见 PKCS8EncodedKeySpec)。
此接口不包含任何方法或常量。它仅用于将所有密钥规范分组,并为其提供类型安全。所有密钥规范都必须实现此接口。
1、字段:DES_KEY_LEN 值为8, 定义以字节为单位的 DES 密钥长度的常量。
2、构造方法:
①public DESKeySpec(byte[] key) throws InvalidKeyException
创建一个 DESKeySpec 对象,使用key中的前 8 个字节作为 DES 密钥的密钥内容。
组成 DES 密钥的字节在 key[0] 和 key[7] 范围内(包含两者)
参数:
key- 具有 DES 密钥内容的缓冲区。复制该缓冲区的前 8 个字节来防止后续修改。 抛出异常:如果给定的密钥内容短于 8 个字节。会抛出InvalidKeyException异常。
②public DESKeySpec(byte[] key,int offset) throws InvalidKeyException
创建一个 DESKeySpec 对象,使用 key 中始于且包含 offset 的前 8 个字节作为 DES-EDE 密钥的密钥内容。
组成 DES 密钥的字节在 key[offset] 和 key[offset+7] 范围内(包含两者)。
参数:key - 具有 DES 密钥内容的缓冲区。复制该缓冲区始于且包含 offset 的前 8 个字节来防止后续修改。 offset - key 中的偏移量,DES 密钥内容从此处开始。
抛出异常:同上
3、方法详细:
①public byte[] getKey() 返回 DES 密钥内容。每一次调用此方法都返回一个新数组。
②public static boolean isParityAdjusted(byte[] key, int offset) throws InvalidKeyException
确定给定的始于且包含 offset 的 DES 密钥内容是否是奇偶校验的 (parity-adjusted)。如果给定的 DES 密钥内容是奇偶校验的,则返回 true,否则返回 false。
③public static boolean isWeak(byte[] key,int offset) throws InvalidKeyException 确定给定的 DES 密钥内容是否是全弱或者半弱的。
测试示例如下:
package com.home;
import javax.crypto.spec.DESKeySpec;
public class TestDESKeySpec {
private DESKeySpec keySpec1;// DESKeySpec实例1
private DESKeySpec keySpec2;// DESKeySpec实例2
private byte[] DESkey;// 设置密钥
public TestDESKeySpec() {
printDESKEYLEN();
try {
this.DESkey = "abcdefghijklmn".getBytes();
keySpec1 = new DESKeySpec(DESkey);
keySpec2 = new DESKeySpec(DESkey, 3);
printKey(keySpec1);
printKey(keySpec2);
// 确定给定的 DES密钥内容是否是奇偶校验的
System.out.println(DESKeySpec.isParityAdjusted(DESkey, 3));
// 确定给定的 DES密钥内容是否是全弱或者半弱的
System.out.println(DESKeySpec.isWeak(DESkey, 3));
} catch (Exception e) {
}
}
public static void main(String[] args) {
new TestDESKeySpec();
}
/**
* 打印以字节为单位的 DES密钥长度的常量的值
*/
private void printDESKEYLEN() {
System.out.println("以字节为单位的 DES密钥长度的常量:" + DESKeySpec.DES_KEY_LEN);
}
/**
* 打印keySpec的key
*
* @param keySpec
*/
private void printKey(DESKeySpec keySpec) {
String keyStr = new String(keySpec.getKey());
System.out.println(keySpec + "的key:" + keyStr);
}
}
Java中DESKeySpec类的更多相关文章
- 基础知识(05) -- Java中的类
Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...
- JAVA中的类和接口
1.类: 类是具有相同属性和方法的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和方法两个主要部分.在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属 ...
- java中Color类的简单总结
java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 publi ...
- Java中String类的方法及说明
String : 字符串类型 一. String sc_sub = new String(c,3,2); // String sb_copy = new String(sb) ...
- java中的类和对象
Java中的类是一个模板,它用于描述一类对象的行为和状态. 对象则是类中的一个实例,对象有状态(属性)和行为(方法).例如一条狗就是一个对象,他的状态就是他的颜色,名字,品种:他的行为就是叫,摇尾巴, ...
- java中String类学习
java中String类的相关操作如下: (1)初始化:例如,String s = “abc”; (2)length:返回字符串的长度. (3)charAT:字符操作,按照索引值获得字符串中的指定字符 ...
- 【JAVA零基础入门系列】Day11 Java中的类和对象
今天要说的是Java中两个非常重要的概念--类和对象. 什么是类,什么又是对象呢?类是对特定集合的概括描述,比如,人,这个类,外观特征上,有名字,有年龄,能说话,能吃饭等等,这是我们作为人类的相同特征 ...
- 在java中String类为什么要设计成final
在java中String类为什么要设计成final? - 胖胖的回答 - 知乎 https://www.zhihu.com/question/31345592/answer/114126087
- 关于Java中基类构造器的调用问题
在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...
随机推荐
- 【火狐FireFox】同步失败后,书签被覆盖,如何恢复书签
问题场景: 使用公司的电脑,下载安装火狐,登录个人帐号后,火狐会自动开始同步书签.但有时候会同步失败,比如登录之前选的是[本地服务],而最新的书签都是在[全球服务]理,那么很有可能同步到的是N久之前的 ...
- php7+apache2.4 安装(window)
一.下载 需要下载 php7.apache2.4.vc2015(VC库) PHP7下载地址:http://windows.php.net/download/ Apache 下载地址:https://h ...
- find 命令一个命令多参数如何使用,????,perm
[root@ob2 mytmp]# find -mtime -7 -type f \( -name "*.html" -o -name "*.tar.gz" \ ...
- archdexls主题游戏页面game-play.php有评论时,报错( ! ) Warning: printf(): Too few arguments in D:\wamp\www\wp-content\themes\arcadexls\games-play.php on line 97
( ! ) Warning: printf(): Too few arguments in D:\wamp\www\wp-content\themes\arcadexls\games-play.php ...
- MySql: ”Commands out of sync“Error (Connect/C++)
使用 Connector/C++ 查询 Mysql , 连续调用存储过程时 会出现如下: Commands out of sync; you can't run this command now,st ...
- C语言写的trim()函数
C语言的标准库中缺少对字符串进行操作的trim()函数,使用起来有些不便,可以使用利用 strlen 和 isspace 函数以及指针来自己写一个. 1.strlen 函数 原型:extern int ...
- Collections 集合工具类
集合工具类 包括很多静态方法来操作集合list 而Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序.搜索以及线程安全等各种操作. 1) 排序( ...
- 关于Cocos2d-x中坐标系的种类和转换
注意: 当一个节点有一个子节点的时候,如果移动父节点,子节点也会跟着做相应的移动变化,只要被添加到父节点中,子节点就被绑定了,所以子节点的位置,坐标就会被动地变化. 当一个节点有一个子节点的时候,如果 ...
- imx6 android5.1 编译
imx6 android5.1 编译 记录一下编译imx6dl android的命令. Android build cd ~/myandroid source build/envsetup.sh lu ...
- nodejs基础 -- Stream流
nodejs 的 Stream 是一个抽象接口,node中有很多对象实现了这个接口.例如,对http服务器发起请求的request对象就是一个Stream,还有stdout(标准输出)也是一个Stre ...