帮忙解码100分,解出来立即得分

likai22 2009-01-21 08:33:20
这是一段DES加密后的乱码,key是87654321,现在不清楚是否使用BASE64进行编码,我自己写了一个解码程序报错如下:
javax.crypto.BadPaddingException: Given final block not properly padded
null
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)
at com.test.DES.getDesCode(DES.java:122)
at com.test.DES.main(DES.java:160)
DES加密后的编码:
"8e6936eba2b7e54504d92c57903b1102049325067b1c1739f8791000142fd6e8883ed33653f5e9c78925fe2cd66935c75862168e0a55bb3c1ff2bde980af4de665c9aa8a4a2d386eeec477294b5daf24336e5a03112c1117925a41bb14443ee5337e6b6ad58f3106d80e3335ec99d527d64e586d8105e66efd7d12227faa691d4bb8517c8fbb9ca46a715447623504837e5c85deb2524ba4fdcc5dbcba6b7c30e8bf730787b11c1de575d413d5b7f8129be31250e283968e838831504a59d678ff146a14963dc26d892995f9b808a5bab1930d1bb155eb353484b35e9f7b00e5892995f9b808a5ba0ed0c7f7f901dbf7be0d82d79012f12ed90204f34114b88967a69b877e56beaa1ffbd2387a6657b022913419ca03678ae40d3954084b53204cce1055edb0fc55636255ae584df4c36fb5bd005df4d89c470343603a433db636b55078a0c2ac47e1383e374b4480c1dc08fb1b7fea8c92b67f2e31b16bb5ced42fc78253bdcec85e9fb5f094b138282899a31e216f3cb59ef88f6d469bae8d1910fbc5a47392a9f70ccac2beef559b66b33efe0646ec40bece2d05120d00ba61d5329d43ccb5474be9ac2f5d68507b8c6c3c6441a8e0541167c1c154792b299bee2392ab5791b37a3de67662d4c078"
解完立即得分,多谢
...全文
649 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbwhwang 2009-02-10
  • 打赏
  • 举报
回复
给你一个DES的例子:

import java.io.*;

import javax.crypto.*;
import java.security.*;

public class DESCryptoTest {
public static void main(String[] args) {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
// Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
KeyGenerator kg = null;
try {
//指定算法,这里为DES;如果想用Blowfish算法,则用 getInstance("Blowfish")
//BouncyCastle基本上支持所有通用标准算法
kg = KeyGenerator.getInstance("DES");

//指定密钥长度,长度越高,加密强度越大
kg.init(56);

//产生密钥
Key key = kg.generateKey();
System.out.println("Key format: " + key.getFormat());
System.out.println("Key algorithm: " + key.getAlgorithm());

//加密要用Cipher来实现
Cipher cipher = Cipher.getInstance("DES");
System.out.println("Cipher provider: " + cipher.getProvider());
System.out.println("Cipher algorithm: " + cipher.getAlgorithm());

byte[] data = "Hello World!".getBytes();
System.out.println("Original data : [" + data.length + "]" +
new String(data));

//设置加密模式
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(data);
System.out.println("Encrypted data: [" + result.length + "]" +
new String(result));

//设置解密模式
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] original = cipher.doFinal(result);
System.out.println("Decrypted data: [" + original.length + "]" +
new String(original));

String filename = "d:\\加密前.txt";
//读入并加密文件
try {
//输入流
cipher.init(Cipher.ENCRYPT_MODE, key);
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filename));
//输出流
CipherOutputStream out = new CipherOutputStream(new BufferedOutputStream(new FileOutputStream("d:\\加密后.txt")), cipher);
int i;
do {
i = in.read();
if (i != -1)
out.write(i);
}
while (i != -1);

in.close();
out.close();
System.out.println("加密文件完成!");
}
catch (Exception ey5) {
System.out.println("Error when encrypt the file");
System.exit(0);
}

try {
cipher.init(Cipher.DECRYPT_MODE, key);
//输出流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("d:\\解密后.txt"));
//输入流
CipherInputStream in = new CipherInputStream(new BufferedInputStream(
new FileInputStream("d:\\加密后.txt")), cipher);

int i;
do {
i = in.read();
if (i != -1)
out.write(i);
}
while (i != -1);

in.close();
out.close();
System.out.println("解密文件完成!");
}
catch (Exception ey5) {
System.out.println("Error when encrypt the file");
System.exit(0);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
getter 2009-02-09
  • 打赏
  • 举报
回复
你不把完整代碼貼出來,幫不了你
Alien 2009-02-08
  • 打赏
  • 举报
回复
谁能解出来了我都给他分!
NickCheng 2009-02-06
  • 打赏
  • 举报
回复
DES加密!高深技术!!!
gengliangyu 2009-02-06
  • 打赏
  • 举报
回复
DES加密!高深技术!!!
getter 2009-02-06
  • 打赏
  • 举报
回复
DES己是過時和不安全的了...
樓主,你的error都寫明是padding出問題了
javax.crypto.BadPaddingException: Given final block not properly padded
你把完整代碼貼出來吧,看能否幫到你(-__-千萬不要很長...)
wishawish 2009-02-05
  • 打赏
  • 举报
回复
顶了,学习ing
likai22 2009-02-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xql80329 的回复:]
Java code修改为:

KeyGenerator _generator = KeyGenerator.getInstance("DES");
Security.addProvider(new sun.security.provider.Sun());
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","SUN");
sr.setSeed(strKey.getBytes());
generator.init(sr);
this.key = _generator.generateKey();
再把sun的jar包加到classpath即可。
[/Quote]

按上面的方法做了,还是javax.crypto.BadPaddingException: Given final block not properly padded
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.SunJCE_h.b(DashoA12275)
at com.sun.crypto.provider.DESCipher.engineDoFinal(DashoA12275)
at javax.crypto.Cipher.doFinal(DashoA12275)
at com.test.TestDes.getDesCode(TestDes.java:55)
at com.test.TestDes.getDesString(TestDes.java:36)
at com.test.TestDes.main(TestDes.java:21)
wenjjing2lianee 2009-01-29
  • 打赏
  • 举报
回复
不熟悉,顶一下!
hspqq 2009-01-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xql80329 的回复:]
Java code修改为:

KeyGenerator _generator = KeyGenerator.getInstance("DES");
Security.addProvider(new sun.security.provider.Sun());
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","SUN");
sr.setSeed(strKey.getBytes());
generator.init(sr);
this.key = _generator.generateKey();
再把sun的jar包加到classpath即可。
[/Quote]
asksddf 2009-01-23
  • 打赏
  • 举报
回复
xql80329 2009-01-23
  • 打赏
  • 举报
回复
修改为:

KeyGenerator _generator = KeyGenerator.getInstance("DES");
Security.addProvider(new sun.security.provider.Sun());
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG","SUN");
sr.setSeed(strKey.getBytes());
generator.init(sr);
this.key = _generator.generateKey();
再把sun的jar包加到classpath即可。

xql80329 2009-01-23
  • 打赏
  • 举报
回复
关于DES 很多
Gao_TF 2009-01-23
  • 打赏
  • 举报
回复
有可能是你原来的明文不满一个加密块,明文又没有采用base64编码加密,所以即使解密采用了base64编码也是不正确的!
呵呵,所以我的结论是没有直接的办法,只有知道明文的填充情况才可以!

以下是参考内容:
http://bbs.chinajavaworld.com/thread.jspa?threadID=680017
“其实程序的错误信息已经告诉你了原因,填充方式不对。因为加密的时候是对数据块实行加密,当最后一个数据块不是刚好一个加密块(如64字节),则会通过填充方式在末尾填充制定的字节来完成加密,当然了,解密的时候通过相同的填充方式,系统知道哪几个字符是填充字符,从而正确地还原。”

http://hi.baidu.com/fire_playing/blog/item/775d94dd58f339345882dd53.html
krakenhka 2009-01-22
  • 打赏
  • 举报
回复
在加密后BYTE[]转STRING的时候就已经出问题了吧。。正常方法试了转不回来
likai22 2009-01-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bzwm 的回复:]
我这里执行了下,报了:

Java codejava.security.InvalidKeyException: Wrong key size
[/Quote]
key是8位的,没错啊,一般DES加密都是8位的Key
receive099 2009-01-22
  • 打赏
  • 举报
回复
mark
netsocket 2009-01-22
  • 打赏
  • 举报
回复
mark
gs840120 2009-01-22
  • 打赏
  • 举报
回复
关注
kukufly 2009-01-22
  • 打赏
  • 举报
回复
mark
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧