zoukankan      html  css  js  c++  java
  • Java中DESKeySpec类

    此类位于 javax.crypto.spec 包下。声明如下:

    public class DESKeySpec extends Object implements KeySpec
    此类指定一个 DES 密钥。
    KeySpec是一个接口,用来组成加密密钥的密钥内容的(透明)规范。如果密钥存储在硬件设备上,则其规范可以包含有助于标识该设备上的密钥的信息。

    用特定于算法的方法或独立于算法的编码格式(例如,ASN.1)可以指定密钥。例如,DSA 专用密钥可以由其组件 xpqg 指定(请参见 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);
    	}
    }
    


     

  • 相关阅读:
    点对点PSCV
    开机启动文件夹
    SpringBoot占用端口
    停止8080端口
    java JDK下载与安装教程
    JRebel热部署
    取消ctrl+alt+箭头 旋转
    空指针调试
    xdebug 断点调试,时间过长会出现超时如何解决
    vue 无法加载文件 CProgram Filesnodejsnpm.ps1,因为在此系统上禁止运行脚本
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3503422.html
Copyright © 2011-2022 走看看