最近刚接触3DES加密.遇到一个问题,百般折腾,无果.
我的问题是:
通过3DES对长度为7或者8的字符数组加密,加密后应该都是8个字节啊.
为什么会不一样呢?
程序输出结果如下
对长度为7的字节数组加密,解密输出结果:
原明文byte[]长度:7 相应的16进制字符串值:0123456789abcd
加密后byte[]长度:8 相应的16进制字符串值:19dffce951d8c37d
解密后byte[]长度:7 相应的16进制字符串值:0123456789abcd
对长度为8的字节数组加密,解密输出结果:
原明文byte[]长度:8 相应的16进制字符串值:0123456789abcdef
加密后byte[]长度:16 相应的16进制字符串值:bb93c15e93aafe01c15629bc63a3c3c8
解密后byte[]长度:8 相应的16进制字符串值:0123456789abcdef
以下是源代码(也可以下载附件里的源码),代码复制即可执行.期待您的帮助
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class DESedeCoderTest {
public static void main(String[] args) throws Exception {
String sHexPlainText = "0123456789abcdef";
SecretKey skSecretkey=(SecretKey)TDESCoder.generateKey(112);
byte[] byteaPlainText = hexStr2ByteArr(sHexPlainText);
byte[] byteaCryptograph = TDESCoder.enc(byteaPlainText, skSecretkey);
byte[] byteaPlainTextAftDec = TDESCoder.dec(byteaCryptograph, skSecretkey);
System.out.println("原明文byte[]长度:"+byteaPlainText.length+"\t相应的16进制字符串值:"+byteArr2HexStr(byteaPlainText));
System.out.println("加密后byte[]长度:"+byteaCryptograph.length+"\t相应的16进制字符串值:"+byteArr2HexStr(byteaCryptograph));
System.out.println("解密后byte[]长度:"+byteaPlainTextAftDec.length+"\t相应的16进制字符串值:"+byteArr2HexStr(byteaPlainTextAftDec));
}
public static String byteArr2HexStr(byte[] bytea) throws Exception {
String sHex = "";
int iUnsigned = 0;
StringBuffer sbHex = new StringBuffer();
for (int i = 0; i < bytea.length; i++) {
iUnsigned = bytea[i];
if (iUnsigned < 0) {
iUnsigned += 256;
}
if (iUnsigned < 16) {
sbHex.append("0");
}
sbHex.append(Integer.toString(iUnsigned, 16));
}
sHex = sbHex.toString();
return sHex;
}
public static byte[] hexStr2ByteArr(String sHex) throws Exception {
if(sHex.length()%2!=0){
sHex="0"+sHex;
}
byte[] bytea =bytea=new byte[sHex.length() / 2];
String sHexSingle = "";
for (int i = 0; i < bytea.length; i++) {
sHexSingle = sHex.substring(i * 2, i * 2 + 2);
bytea[i] = (byte) Integer.parseInt(sHexSingle, 16);
}
return bytea;
}
}
class TDESCoder {
private static final String S_KEY_ALGORITHM = "DESede";
private static final String S_CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";
private static SecretKey skSecretkey;
public static byte[] enc(byte[] byteaPlainText,SecretKey skSecretkey) throws Exception {
Cipher cipher = Cipher.getInstance(S_CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, skSecretkey);
byte[] byteaCryptograph=cipher.doFinal(byteaPlainText);
return byteaCryptograph;
}
public static byte[] dec(byte[] byteaCryptograph,SecretKey skSecretkey) throws Exception {
Cipher cCipher = Cipher.getInstance(S_CIPHER_ALGORITHM);
cCipher.init(Cipher.DECRYPT_MODE, skSecretkey);
byte[] byteaPlainText=cCipher.doFinal(byteaCryptograph);
return byteaPlainText;
}
public static Key generateKey(int iBits) throws Exception {
iBits=112;
KeyGenerator kg = KeyGenerator.getInstance(S_KEY_ALGORITHM);
kg.init(iBits);
skSecretkey = kg.generateKey();
return skSecretkey;
}
}
相关推荐
加密后的二进串:72:83:1D:0A:BF:F0:EB:81:DE:B2:DD:58:CA:EA:4F:7B:8C:9F:98:13:01:99:F0:F4:48:6B:1E:8F:17:D2:3E:DF:9B:C1:90:39:D5:91:6D:F8 解密前的信息:72:83:1D:0A:BF:F0:EB:81:DE:B2:DD:58:CA:EA:4F:7B:8C:...
自己总结的3des java开发 的加解密过程 介绍各个api的使用方法
定义 加密算法,可用 DES,DESede,Blowfish
MD5算法,URLEncoding,Base64编码,AES,DES,DESede,RSA加密解密工具类和使用实例
java 对称加为密 DESede 与 非对称加密 RSA 示例
DES_DESede_AES算法DES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AESDES_DESede_AES
网上常用的对称加密一般就这三种吧,与APP中常用的那些也基本能对上。调用修改的是 CryptoJS, https://github.com/brix/crypto-js/。连同mode和padding一共108种。@镇坛道德标杆。
本实例解释如何利用DES私钥加密算法加解密,对称加密的例子,本例中定义的加密算法可以是DES,DESede,Blowfish等,选择DES算法,密钥长度必须为56位,用密钥加密明文(message),生成密文(cipherText),操作模式为加密...
本算法基于网上javascript des和3des加密解密算法修改,实现了与标准java des和3des加密解密算法的互操作。
PHP版3DES加解密类 * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容
使用纯Java代码实现数据加密,DESede加密 及返回一个包含有 key(加密) fid(当前文件) name (文件/文件夹路径)的集合对象。可根据这个结果传到前台,通过jquery.ztree 或是dtree 直接生成文件夹结构的目录树
DES 为 Data Encryption Standard (数据加密...采用的身份验证方法是由旧系统 S 对用户 ID 进行加密,然后新系统 N 对加密后的用户 ID 进行解密,从而获取用户 ID 并进行身份验证。 由于旧系统 S 是用 Java 实现的,
用java写的DES加密代码,使用起来非常简单!DESede des = new DESede(); String desPassword=des.run(string)
* 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容 * */ class CryptDes { var $key; var $iv; function CryptDes($key, $iv){ $this->key = $key; $this->iv = $iv; } function encrypt($input){ $...
摘要:Java源码,算法相关,对称加密 Java对称加密实例源码,解释如何利用DES私钥加密算法加解密,定义加密算法,可用 DES,DESede,Blowfish。 用密钥加密明文(message),生成密文(cipherText),操作模式为加密(Cipher....
DES安全编码组件 支持 DES、DESede(TripleDES,就是3DES)、AES、Blowfish、RC2、 RC4(ARCFOUR)
主要介绍了字符串desede 3des加密示例,大家参考使用吧
PHP版DES加解密类 可与java的DES(DESede/CBC/PKCS5Padding)加密方式兼容
【开发者开源大赛】常见的AES、DES、3DES(DESede)的108种JS加密
文件校验2096.8 小结211第7章初等数据加密—对称加密算法2137.1 对称加密算法简述2137.2 数据加密标准—DES 2147.3 三重DES—DESede 2227.4 高级数据加密标准—AES 2277.5 国际数据加密标准—IDEA 2327.6 基于口令...