易截截图软件、单文件、免安装、纯绿色、仅160KB

java 与 c# 3des 加解密

 
java 与 c# 3des 加解密 
主要差异如下:
1、 对于待加密解密的数据,各自的填充模式不一样
C#的模式有:ANSIX923、ISO10126、None、PKCS7、Zero,而Java有:NoPadding、PKCS5Padding、SSL3Padding
2、 各自默认的3DES实现,模式和填充方式不一样
C#的默认模式为CBC,默认填充方式为PKCS7; java的默认模式为ECB,默认填充方式为PKCS5Padding
3、 各自的key的size不一样
C#中key的size为16和24均可;java中要求key的size必须为24;对于CBC模式下的向量iv的size两者均要求必须为8
翻看了3DES的原理:
DES主要采用替换和移位的方法,用56位密钥对64位二进制数据块进行加密,每次加密可对64位的输入数据进行16轮编码,
经一系列替换和移位后,输入的64位转换成安全不同的64的输出数据

3DES:是在DES的基础上采用三重DES,即用两个56位的密钥K1,K2,发送方用K1加密,K2解密,再使用K1加密.接收方使用K1解密,K2加密,再使用K1解密,
其效果相当于密钥长度加倍.
于是尝试在java中,对key进行补位,即用前8个字节作为byte[24] 中的byte[16]~byte[23];发现与c#中加密的结果相同!于是大胆假设C#中可能是检查key的size为16的时候
自动将前8个字节作为k3进行了补位,而java没有实现这一点(因为java的3DES算法中强制要求key的size必须为24)。这样的情况下,可能就是发送方用k1加密、k2解密、k3再加密;接受方k3解密、k2加密、再k1解密来实现。
最终经过编码验证,确认key大小为24时,java和c#的加密解密结果相一致。
Java中实现时,只要注意对大小不足24的key进行补位,和采用CBC模式,填充模式为PKCS5Padding即可。
public class CDES {
public static byte[] encrypt(String sKey, byte[] bIV, byte[] bPlainText, int nOffset, int nSize)
throws Exception {
byte[] bKey = buildKey(sKey);
byte[] bInput = buildInput(nSize, bPlainText, nOffset);
byte[] bResult = encrypt(bIV, bKey, bInput);
return bResult;
}
public static byte[] decrypt(String sKey, byte[] bIV, byte[] bCipherText)
throws Exception {
byte[] bKey = buildKey(sKey);
SecretKey securekey = buildSecretKey(bKey);
IvParameterSpec iv = new IvParameterSpec(bIV);
Ciph


相关文档:

java实现对纯真IP数据库的查询

来源:http://www.blogjava.net/lcs868/archive/2008/12/16/246644.html
用java实现对纯真IP数据库的查询,首先到网上下载QQwry.da文件,读取代码如下: 1.IP记录实体类 package com.guess.tools;   /** *
* 一条IP范围记录,不仅包括国家和区域,也包括起始IP和结束IP *   *
* @author swal ......

给JAVA的新手

很多人这样问,JAVA怎么学呀?应该看什么书呀?
老实说个人来说,书看得不多,开始的时候就看了本 sam's teach yourself Java2 in 24 hours.
所以问起这些问题,真不好说,每个人都不一样.
总的来说,我觉得是多练习是很重要的,
不要看太多书一本就可以了,但练习一定要多做,
学习是一个模仿的过程,
模仿的过程中还要不 ......

java路径

import java.io.File;
/**
* @description <p>java 路径</p>
* @author swandragon
* @date Nov 5, 2009
*/
public class FilePath{
/**
* 开发中不要使用System.getProperty("user.dir")获取当前用户目录的相对路径
* 也尽可能不要使用绝对路径,使用绝对路径时可以在配置文件中 ......

java 中进度条的使用

一般进度条使用是给用户一种友好提示,让用户感觉这个事情正在做,而不是系统没有反应了;
JProgressBar的代码文档大家可以参考JDK1.6,比如构造函数有哪些,常用的方法有哪些在此就不多叙述;
一般使用情况是,点击按钮是做一件事情,比如备份,进度条出现并增加进度表示正在进行或到什么程度,事情结束时,进度条显示满 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号