JAVA DESKeySpec 加密的实现

2022-11-16 09:23:41 浏览数 (1)

代码语言:javascript复制
public static String DesEncrypt(String jobNum,String keys)
{
    try {
        byte[] key = keys.getBytes();
        // 初始化向量
        IvParameterSpec iv = new IvParameterSpec(key);
        DESKeySpec desKey = new DESKeySpec(key);
        // 创建一个密匙工厂,然后用它把DESKeySpec转换成securekey
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey securekey = keyFactory.generateSecret(desKey);
        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
        // 用密匙初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, iv);
        // 现在,获取数据并加密
        // 正式执行加密操作
        byte[] tt=jobNum.getBytes(StandardCharsets.UTF_8);
        byte[] tq= cipher.doFinal(tt);
        return parseByte2HexStr(tq);
    } catch (Throwable e) {
        e.printStackTrace();
    }
    return null;
}
/**
 * 将二进制转换成16进制
 *
 * @param buf
 * @return
 */
public static String parseByte2HexStr(byte buf[]) {
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < buf.length; i  ) {
        String hex = Integer.toHexString(buf[i] & 0xFF);
        if (hex.length() == 1) {
            hex = '0'   hex;
        }
        sb.append(hex.toUpperCase());
    }
    return sb.toString();
}
public static byte[] convertHexString(String ss)
{
    byte digest[] = new byte[ss.length() / 2];
    for(int i = 0; i < digest.length; i  )
    {
        String byteString = ss.substring(2 * i, 2 * i   2);
        int byteValue = Integer.parseInt(byteString, 16);
        digest[i] = (byte)byteValue;
    }
    return digest;
}

运行的效果:

编辑

参考官方网站:DESKeySpec (Java Platform SE 6)

DES_KEY_LEN

定义以字节为单位的 DES 密钥长度的常量。

字段摘要

static int

DES_KEY_LEN 定义以字节为单位的 DES 密钥长度的常量。

构造方法摘要

DESKeySpec(byte[] key) 创建一个 DESKeySpec 对象,使用 key 中的前 8 个字节作为 DES 密钥的密钥内容。

DESKeySpec(byte[] key, int offset) 创建一个 DESKeySpec 对象,使用 key 中始于且包含 offset 的前 8 个字节作为 DES-EDE 密钥的密钥内容。

方法摘要

byte[]

getKey() 返回 DES 密钥内容。

static boolean

isParityAdjusted(byte[] key, int offset) 确定给定的始于且包含 offset 的 DES 密钥内容是否是奇偶校验的 (parity-adjusted)。

static boolean

isWeak(byte[] key, int offset) 确定给定的 DES 密钥内容是否是全弱或者半弱的。

从类 java.lang.Object 继承的方法

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

字段详细信息

DES_KEY_LEN

public static final int DES_KEY_LEN

定义以字节为单位的 DES 密钥长度的常量。

另请参见:

常量字段值

构造方法详细信息

DESKeySpec

public DESKeySpec(byte[] key)

throws InvalidKeyException

创建一个 DESKeySpec 对象,使用 key 中的前 8 个字节作为 DES 密钥的密钥内容。

组成 DES 密钥的字节在 key[0]key[7] 范围内(包含两者)

参数:

key - 具有 DES 密钥内容的缓冲区。复制该缓冲区的前 8 个字节来防止后续修改。

抛出:

NullPointerException - 如果给定的密钥内容为 null

InvalidKeyException - 如果给定的密钥内容短于 8 个字节。

DESKeySpec

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 密钥内容从此处开始。

抛出:

NullPointerException - 如果给定的密钥内容为 null

InvalidKeyException - 如果给定的始于且包含 offset 的密钥内容短于 8 个字节。

方法详细信息

getKey

public byte[] getKey()

返回 DES 密钥内容。

返回:

返回 DES 密钥内容。每一次调用此方法都返回一个新数组。

isParityAdjusted

public static boolean isParityAdjusted(byte[] key,

int offset)

throws InvalidKeyException

确定给定的始于且包含 offset 的 DES 密钥内容是否是奇偶校验的 (parity-adjusted)。

参数:

key - 具有 DES 密钥内容的缓冲区。

offset - key 中的偏移量,DES 密钥内容从此处开始。

返回:

如果给定的 DES 密钥内容是奇偶校验的,则返回 true,否则返回 false。

抛出:

InvalidKeyException - 如果给定的密钥内容为 null,或者始于且包含 offset 的密钥内容短于 8 个字节。

isWeak

public static boolean isWeak(byte[] key,

int offset)

throws InvalidKeyException

确定给定的 DES 密钥内容是否是全弱或者半弱的。

参数:

key - 具有 DES 密钥内容的缓冲区。

offset - key 中的偏移量,DES 密钥内容从此处开始。

返回:

如果给定的 DES 密钥内容是全弱或者半弱的,则返回 true,否则返回 false。

抛出:

InvalidKeyException - 如果给定的密钥内容为 null,或者始于且包含 offset 的密钥内容短于 8 个字节。

0 人点赞