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 密钥长度的常量。
字段摘要 | |
static int |
DES_KEY_LEN 定义以字节为单位的 DES 密钥长度的常量。 |
构造方法摘要 | |
DESKeySpec(byte[] key) 创建一个 DESKeySpec 对象,使用 key 中的前 8 个字节作为 DES 密钥的密钥内容。 |
|
创建一个 DESKeySpec 对象,使用 key 中始于且包含 offset 的前 8 个字节作为 DES-EDE 密钥的密钥内容。 |
方法摘要 | |
byte[] |
getKey() 返回 DES 密钥内容。 |
static boolean |
确定给定的始于且包含 offset 的 DES 密钥内容是否是奇偶校验的 (parity-adjusted)。 |
static boolean |
确定给定的 DES 密钥内容是否是全弱或者半弱的。 |
字段详细信息 |
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
- 如果给定的密钥内容短于 8 个字节。InvalidKeyException
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 个字节。