`

DSC加密算法

    博客分类:
  • java
阅读更多
import java.security.Key;
import java.security.Security;

import javax.crypto.Cipher;

public class DES {

/**
* @param args
*/

private static String strDefaultKey = "national";

private Cipher encryptCipher = null;

private Cipher decryptCipher = null;

/**
* 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
* hexStr2ByteArr(String strIn) 互为可逆的转换过程
*
* @param arrB
*            需要转换的byte数组
* @return 转换后的字符串
* @throws Exception
*             本方法不处理任何异常,所有异常全部抛出
*/
public static String byteArr2HexStr(byte[] arrB) throws Exception {
int iLen = arrB.length;
// 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
StringBuffer sb = new StringBuffer(iLen * 2);
for (int i = 0; i < iLen; i++) {
int intTmp = arrB[i];
// 把负数转换为正数
while (intTmp < 0) {
intTmp = intTmp + 256;
}
// 小于0F的数需要在前面补0
if (intTmp < 16) {
sb.append("0");
}
sb.append(Integer.toString(intTmp, 16));
}
return sb.toString();
}

/**
* 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
* 互为可逆的转换过程
*
* @param strIn
*            需要转换的字符串
* @return 转换后的byte数组
* @throws Exception
*             本方法不处理任何异常,所有异常全部抛出
* @author <a href="mailto:leo841001@163.com">LiGuoQing</a>
*/
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
byte[] arrB = strIn.getBytes();
int iLen = arrB.length;

// 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
byte[] arrOut = new byte[iLen / 2];
for (int i = 0; i < iLen; i = i + 2) {
String strTmp = new String(arrB, i, 2);
arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
}
return arrOut;
}

/**
* 默认构造方法,使用默认密钥
*
* @throws Exception
*/
public DES() throws Exception {
this(strDefaultKey);
}

/**
* 指定密钥构造方法
*
* @param strKey
*            指定的密钥
* @throws Exception
*/
public DES(String strKey) throws Exception {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
Key key = getKey(strKey.getBytes());

encryptCipher = Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE, key);

decryptCipher = Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE, key);
}

/**
* 加密字节数组
*
* @param arrB
*            需加密的字节数组
* @return 加密后的字节数组
* @throws Exception
*/
public byte[] encrypt(byte[] arrB) throws Exception {
return encryptCipher.doFinal(arrB);
}

/**
* 加密字符串
*
* @param strIn
*            需加密的字符串
* @return 加密后的字符串
* @throws Exception
*/
public String encrypt(String strIn) throws Exception {
return byteArr2HexStr(encrypt(strIn.getBytes()));
}

/**
* 解密字节数组
*
* @param arrB
*            需解密的字节数组
* @return 解密后的字节数组
* @throws Exception
*/
public byte[] decrypt(byte[] arrB) throws Exception {
return decryptCipher.doFinal(arrB);
}

/**
* 解密字符串
*
* @param strIn
*            需解密的字符串
* @return 解密后的字符串
* @throws Exception
*/
public String decrypt(String strIn) throws Exception {
return new String(decrypt(hexStr2ByteArr(strIn)));
}

/**
* 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
*
* @param arrBTmp
*            构成该字符串的字节数组
* @return 生成的密钥
* @throws java.lang.Exception
*/
private Key getKey(byte[] arrBTmp) throws Exception {
// 创建一个空的8位字节数组(默认值为0)
byte[] arrB = new byte[8];

// 将原始字节数组转换为8位
for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
arrB[i] = arrBTmp[i];
}
// 生成密钥
Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");

return key;
}
}
分享到:
评论

相关推荐

    DSC_v1.2a,协议版本V1.2A.rar

    DSC_v1.2a引入了更先进的加密算法,如AES(高级加密标准)和RSA( Rivest-Shamir-Adleman)公钥加密,以加强数据在传输过程中的保护,防止未授权的访问和篡改。此外,该版本还强化了身份验证机制,确保只有合法的...

    宏电DTU的DDP协议GPRS DSC中心源代码DEMO SDK

    6. **安全性和数据加密**:了解如何保护数据在传输过程中的安全性,可能涉及到的加密算法和认证机制。 7. **应用层协议设计**:如果DEMO包含了自定义的应用层协议,可以学习如何设计和实现这类协议。 在实际项目中...

    DSC-JavaImplementation

    在DSC-JavaImplementation中,OPAL用于验证和测试Java实现的DSC算法。实时仿真允许开发者在接近实际运行环境的情况下测试控制策略,从而确保其在真实电网中的有效性。 3. **分布式控制**:分布式控制是相对于集中式...

    AES加密解密源码

    AES是目前广泛使用的对称加密算法,它以其高效性和安全性在各种应用场景中占据重要地位。该源码是由VC++编程语言实现的,这是一种常用的C++集成开发环境,适用于创建桌面应用和系统级软件。 AES算法由比利时密码学...

    DSC-GAZ-PG1926

    9. 安全性:加密算法、身份验证、授权和安全编码实践。 10. 文档编写:Markdown、Doxygen或Javadoc等文档生成工具。 由于缺乏具体标签和详细描述,以上分析基于常见的IT项目开发场景,实际内容可能需要根据项目的...

    nordic bootloader ecc全部的库

    在Nordic SDK(Software Development Kit)中,ECC(Elliptic Curve Cryptography)库是实现安全通信和固件更新的关键部分,因为ECC提供了一种高效且安全的加密算法。 Nordic SDK中的`nrf5_sdk_17.1.0_ddde560`是一...

    PIC函数库介绍

    - **dsPIC® DSC噪声抑制库 (SW300040)**:提供高级噪声抑制算法,提高语音和数据传输质量。 - **dsPIC® DSC声学回声消除库 (SW300060)**:有效消除声学回声,改善通话清晰度。 - **dsPIC® DSC线路回声消除库 (SW...

    随机数+组合

    在IT行业中,随机数和组合是两个非常重要的概念,它们广泛应用于各种软件开发场景,如游戏编程、模拟仿真、加密算法、数据统计等。在这个特定的案例中,我们看到的"随机数+组合"可能指的是如何在Java程序中生成...

    AW-GH381模块手册

    - **高级加密标准**:支持AES加密算法,提高数据安全性。 - **多模支持**:同时支持WLAN与Bluetooth,满足多场景需求。 - **节能模式**:高度集成的电源管理系统,显著降低功耗。 - **安全协议**:实施WPA/WPA2、WEP...

    COT App-crx插件

    这包括对称加密、非对称加密以及哈希算法等不同类型的加密方法。 **二、DSC硬件令牌** DSC(Digital Signature Certificate)硬件令牌是一种物理设备,通常包含一个安全芯片,用于存储私钥和其他敏感信息。在COT ...

    LGT8FX8P文档

    - 引入全新的程序加密算法,以保证用户代码的安全性。 3. 外设控制器和接口: - 具有两个具有独立预分频器的8位定时器,支持比较输出模式。 - 提供两个具有独立预分频器的16位定时器,支持输入俘获和比较输出。 ...

    达梦数据库管理系统DM8白皮书.pptx

    2. 数据库安全:DM8提供了集群形态支持、访问控制、落盘数据全面加密、国产环境下的高强度密码算法支持等安全特性,确保数据库的安全。 3. 数据库迁移:DM8提供了专用的DB API特性,支持更多平台的SQL语法兼容性,...

    达梦数据库管理系统DM8白皮书.pdf

    * 落盘数据全面加密 * 国产环境下的高强度密码算法支持 * DM8安全持续改进 * 广泛的SQL语法兼容性 * 专用DB API特性 * 兼容便捷的数据迁移 * 达梦柔性替代迁移解决方案 面向未来的数据库技术架构 达梦公司认为,...

    sina2014校园招聘系统研发工程师c++笔试题

    尽管提供的压缩包文件名(DSC_0039.jpg、DSC_0037.jpg、DSC_0038.jpg)看起来像是图片文件,通常在笔试题中不会包含这些内容,它们可能是题目中的辅助材料,比如示意图或者代码示例。在实际考试中,考生需要根据这些...

    MICROCHIP_16位单片机和数字信号控制器-综合文档

    Microchip的DSC产品,如dsPIC33和MCP3XXX系列,为设计者提供了高效的浮点运算单元,增强了对实时控制算法的支持。 综合文档可能涵盖了以下关键知识点: 1. **体系结构**:介绍Microchip 16位MCU和DSC的内部架构,...

    tms320f28335(中文版).pdf

    TMS320F28335是德州仪器(Texas Instruments)推出的一...整体而言,TMS320F28335是集成了强大处理能力、丰富外设和灵活控制功能于一体的高性能数字信号控制器,广泛适用于需要复杂控制算法和高效数据处理的应用场景。

Global site tag (gtag.js) - Google Analytics