JAVA DESKeySpec 加密的实现
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(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 个字节。
相关文章
- JAVA多线程面试题_java多线程的实现方式
- java使用nio读写文件[通俗易懂]
- java scanner怎么用_Java中Scanner类的用法及使用步骤分享!「建议收藏」
- java工作流_Java 实现简单工作流
- java ee简介_Java EE 简介
- java控制台输入数组_Java控制台输入数组并逆序输出的方法实例
- java oracle数据备份_Java实现Oracle数据库备份
- Java 零拷贝_java高性能编程
- JAVA实验室设备管理系统代码_java做一个简单学生管理系统
- java在线播放_Java实现视频在线播放flv视频
- java 缓存工具类初始化_Java缓存框架
- java 常量表达式,需要常量表达式? (Java switch语句)[通俗易懂]
- java如何采用MD5加密和解密详解编程语言
- ?使用 Java 连接 MySQL 数据库的步骤(java怎么连接mysql)
- Java与MySQL的实现协同(java和mysql)
- Oracle终止支持Java:转向新时代(oracle抛弃java)
- 实现使用Java实现Redis消息队列(redis消息队列java)
- MySQL与Java互调:构建高效业务系统(mysql调用java)
- Linux调用Java实现编程快速开发(linux调用java)
- 实现Java实现Redis集合的技术研究(redis集合java)
- 服务器上的文件Java获取Linux服务器文件:简单又高效的操作方法(java获取linux)
- MacOS下Java开发环境搭建指南(macos开发java)
- Java脚本实现Linux系统的登录(java登录Linux)
- 使用Java轻松导出MySQL数据(java导出mysql)
- 使用Java远程控制Linux 实现简单、高效的服务器管理(java控制linux)
- 使用Java轻松读取Redis数据 – 一步一步指南!(java读取redis)
- Exploring the Power of Java with MongoDB for Enhanced Data Management(java与mongodb)
- MySQL之Java实现主从复制(java mysql主从)
- Java程序建立Oracle数据库表的实现方式(java建oracle表)