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 个字节。