当前位置:首页 » 密码管理 » dec加密算法

dec加密算法

发布时间: 2022-11-16 23:06:18

A. 求一个用java编写的可逆的加密算法程序,自己写的小程序也行。

public class mySecurity {
private static KeyGenerator keygen ;
private static SecretKey secretKey;
private static Cipher cipher;
private static mySecurity security = null;

private mySecurity(){
}
public static mySecurity getInstance() throws Exception{
if(security == null){
security = new mySecurity();
keygen = KeyGenerator.getInstance("AES");
secretKey = keygen.generateKey();
cipher =Cipher.getInstance("AES");
}
return security;
}

//加密
public String encrypt(String str) throws Exception{
cipher.init(Cipher.ENCRYPT_MODE,secretKey);

byte [] src = str.getBytes(); byte [] enc = cipher.doFinal(src);
return parseByte2HexStr(enc); }
//解密
public String decrypt(String str) throws Exception{
cipher.init(Cipher.DECRYPT_MODE,secretKey);

byte[] enc = parseHexStr2Byte(str); byte [] dec = cipher.doFinal(enc);
return new String(dec); }
/**将16进制转换为二进制
* @param hexStr
* @return
*/
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length()/2];
for (int i = 0;i< hexStr.length()/2; i++) {
int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
result[i] = (byte) (high * 16 + low);
}
return result;
}

/**将二进制转换成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 void main(String[] args) throws Exception{
String str = "abc haha 我";
String ss = mySecurity.getInstance().encrypt(str) ;
System.out.println(ss);
System.out.println(mySecurity.getInstance().decrypt(ss));

}
}

B. DES加密算法 java实现

package des;

import java.io.*;
import java.nio.*;
import java.nio.channels.FileChannel;

public class FileDES{
private static final boolean enc=true; //加密
private static final boolean dec=false; //解密

private String srcFileName;
private String destFileName;
private String inKey;
private boolean actionType;
private File srcFile;
private File destFile;
private Des des;

private void analyzePath(){
String dirName;
int pos=srcFileName.lastIndexOf("/");
dirName=srcFileName.substring(0,pos);
File dir=new File(dirName);
if (!dir.exists()){
System.err.println(dirName+" is not exist");
System.exit(1);
}else if(!dir.isDirectory()){
System.err.println(dirName+" is not a directory");
System.exit(1);
}

pos=destFileName.lastIndexOf("/");
dirName=destFileName.substring(0,pos);
dir=new File(dirName);
if (!dir.exists()){
if(!dir.mkdirs()){
System.out.println ("can not creat directory:"+dirName);
System.exit(1);
}
}else if(!dir.isDirectory()){
System.err.println(dirName+" is not a directory");
System.exit(1);
}
}

private static int replenish(FileChannel channel,ByteBuffer buf) throws IOException{
long byteLeft=channel.size()-channel.position();
if(byteLeft==0L)
return -1;
buf.position(0);
buf.limit(buf.position()+(byteLeft<8 ? (int)byteLeft :8));
return channel.read(buf);
}

private void file_operate(boolean flag){
des=new Des(inKey);
FileOutputStream outputFile=null;
try {
outputFile=new FileOutputStream(srcFile,true);
}catch (java.io.FileNotFoundException e) {
e.printStackTrace(System.err);
}
FileChannel outChannel=outputFile.getChannel();

try{
if(outChannel.size()%2!=0){
ByteBuffer bufTemp=ByteBuffer.allocate(1);
bufTemp.put((byte)32);
bufTemp.flip();
outChannel.position(outChannel.size());
outChannel.write(bufTemp);
bufTemp.clear();
}
}catch(Exception ex){
ex.printStackTrace(System.err);
System.exit(1);
}
FileInputStream inFile=null;
try{
inFile=new FileInputStream(srcFile);
}catch(java.io.FileNotFoundException e){
e.printStackTrace(System.err);
//System.exit(1);
}
outputFile=null;
try {
outputFile=new FileOutputStream(destFile,true);
}catch (java.io.FileNotFoundException e) {
e.printStackTrace(System.err);
}

FileChannel inChannel=inFile.getChannel();
outChannel=outputFile.getChannel();

ByteBuffer inBuf=ByteBuffer.allocate(8);
ByteBuffer outBuf=ByteBuffer.allocate(8);

try{
String srcStr;
String destStr;
while(true){

if (replenish(inChannel,inBuf)==-1) break;
srcStr=((ByteBuffer)(inBuf.flip())).asCharBuffer().toString();
inBuf.clear();
if (flag)
destStr=des.enc(srcStr,srcStr.length());
else
destStr=des.dec(srcStr,srcStr.length());
outBuf.clear();
if (destStr.length()==4){
for (int i = 0; i<4; i++) {
outBuf.putChar(destStr.charAt(i));
}
outBuf.flip();
}else{
outBuf.position(0);
outBuf.limit(2*destStr.length());
for (int i = 0; i<destStr.length(); i++) {
outBuf.putChar(destStr.charAt(i));
}
outBuf.flip();
}

try {
outChannel.write(outBuf);
outBuf.clear();
}catch (java.io.IOException ex) {
ex.printStackTrace(System.err);
}
}
System.out.println (inChannel.size());
System.out.println (outChannel.size());
System.out.println ("EoF reached.");
inFile.close();
outputFile.close();
}catch(java.io.IOException e){
e.printStackTrace(System.err);
System.exit(1);
}
}

public FileDES(String srcFileName,String destFileName,String inKey,boolean actionType){
this.srcFileName=srcFileName;
this.destFileName=destFileName;
this.actionType=actionType;
analyzePath();
srcFile=new File(srcFileName);
destFile=new File(destFileName);
this.inKey=inKey;
if (actionType==enc)
file_operate(enc);
else
file_operate(dec);
}

public static void main(String[] args){
String file1=System.getProperty("user.dir")+"/111.doc";
String file2=System.getProperty("user.dir")+"/222.doc";
String file3=System.getProperty("user.dir")+"/333.doc";
String passWord="1234ABCD";
FileDES fileDes=new FileDES(file1,file2,passWord,true);
FileDES fileDes1=new FileDES(file2,file3,passWord,false);
}

C. 基于DES算法的CBC演示程序实现(java)

基于DES算法的CBC演示程序实现(java)
package des;

import java.io.*;
import java.nio.*;
import java.nio.channels.FileChannel;

public class FileDES{
private static final boolean enc=true; //加密
private static final boolean dec=false; //解密

D. DES算法和RSA算法的区别

DES算法全称为Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 DES算法把64位的明文输入块变为64位的密文输出块,它所使用的密钥也是64位,其算法主要分为两步: 1初始置换 其功能是把输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长3 2位,其置换规则为将输入的第58位换到第一位,第50位换到第2位……依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0是右32位,例:设置换前的输入值为D1D2D3……D64,则经过初始置换后的结果为:L0=D58D50……D8;R0=D57D49……D7。 2逆置换 经过16次迭代运算后,得到L16、R16,将此作为输入,进行逆置换,逆置换正好是初始置换的逆运算,由此即得到密文输出。 RSA算法简介 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。 RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。 密钥对的产生。选择两个大素数,p 和q 。计算: n = p * q 然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足 e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ) 其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。 加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对应的密文是: ci = mi^e ( mod n ) ( a ) 解密时作如下计算: mi = ci^d ( mod n ) ( b ) RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作 HASH 运算。 RSA 的安全性。 RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。 RSA的速度。 由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。 RSA的选择密文攻击。 RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构: ( XM )^d = X^d *M^d mod n 前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不同类型的攻击方法。 RSA的公共模数攻击。 若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则: C1 = P^e1 mod n C2 = P^e2 mod n 密码分析者知道n、e1、e2、C1和C2,就能得到P。 因为e1和e2互质,故用Euclidean算法能找到r和s,满足: r * e1 + s * e2 = 1 假设r为负数,需再用Euclidean算法计算C1^(-1),则 ( C1^(-1) )^(-r) * C2^s = P mod n 另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享模数n。 RSA的小指数攻击。 有一种提高RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。参考资料: http://www.radyinfo.com/KNOWLEDGE/RSA.HTM

E. 求有关有线电视解扰器破解的方法

你的是模拟加密的还是数字加的密。如果是模拟的可以解,但是是数字的就不可以解了
模拟的用3个电阻,一个电容,外加一个可调串联好在慢慢调可调

F. 谁能告诉我所有的扩展名分别代表什么啊

★常用文件扩展名列表
A 对象代码库文件
AAM Authorware shocked文件
AAS Authorware shocked包
ABF Adobe二进制屏幕字体
ABK CorelDRAW自动备份文件
ABS 该类文件有时用于指示一个摘要(就像在一篇有关科学方面的文章的一个摘要或概要,取自abstract)
ACE Ace压缩档案格式
ACL CorelDRAW 6键盘快捷键文件
ACM Windows系统目录文件
ACP Microsoft office助手预览文件
ACR 美国放射医学大学文件格式
ACT Microsoft office助手文件
ACV OS/2的驱动程序,用于压缩或解压缩音频数据
AD After Dark屏幕保护程序
ADA Ada源文件(非-GNAT)
ADB Ada源文件主体(GNAT);HP100LX组织者的约定数据库
ADD OS/2用于引导过程的适配器驱动程序
ADF Amiga磁盘文件
ADI AutoCAD设备无关二进制绘图仪格式
ADM After Dark多模块屏幕保护;Windows NT策略模板
ADP FaxWork用于传真调制解调器的交互安装文件;Astound Dynamite文件
ADR After Dark随机屏幕保护;Smart Address的地址簿
ADS Ada源文件说明书(GNAT)
AFM Adobe的字体尺度
AF2,AF3 ABC的FlowChat文件
AI Adobe Illustrator格式图形
AIF,AIFF 音频互交换文件,Silicon Graphic and Macintosh应用程序的声音格式
AIFC 压缩AIF
AIM AOL即时信息传送
AIS ACDSee图形序列文件;Velvet Studio设备文件
AKW RoboHELP的帮助工程中所有A-关键词
ALAW 欧洲电话音频格式
ALB JASC Image Commander相册
ALL 艺术与书信库
AMS Velvet Studio音乐模块(MOD)文件;Extreme的Tracker模块文件
ANC Canon Computer的调色板文件,包含一系列可选的颜色板
ANI Windows系统中的动画光标
ANS ANSI文本文件
ANT SimAnt For Windows中保存的游戏文件
API Adobe Acrobat使用的应用程序设计接口文件
APR Lotus Approach 97文件
常用文件扩展名及含义(B开头)

BIN 二进制文件
BK,BK$ 有时用于代表备份版本
BKS IBM BookManager Read书架文件
BMK 书签文件
BMP Windows或OS/2位图文件
BMI Apogee BioMenace数据文件
BOOK Adobe FrameMaker Book文件
BOX Lotus Notes的邮箱文件
BPL Borlard Delph 4打包库
BQY BrioQuery文件
BRX 用于查看多媒体对象目录的文件
BSC MS Developer Studio浏览器信息文件
BSP Quake图形文件
BS1 Apogee Blake Stone数据文件
BS_ Microsoft Bookshelf Find菜单外壳扩展名
BTM Norton 应用程序使用的批处理文件
BUD Quicken的备份磁盘
BUN CakeWalk 声音捆绑文件(一种MIDI程序)
BW SGI黑白图像文件
BWV 商业波形文件
BYU BYU的电影文件格式
B4 Helix Nuts and Bolts文件

常用扩展名及含义(C开头)

C C代码文件
C0l 台风波形文件
CAB Microsoft压缩档案文件
CAD Softdek的Drafix CAD文件
CAL CALS压缩位图;日历计划表数据
CAM Casio照相机格式
CAP 压缩音乐文件格式
CAS 逗号分开的ASCⅡ文件
CAT Quicken使用 的IntellCharge分类文件
CB Microsoft干净引导文件
CBI 二进制卷格式文件(用于IBM大型机系统)
CC Visual dBASE用户自定义类文件
CCA cc:邮件文件
CCB Visual Basic动态按钮配置文件
CCF 多媒体查看器配置文件,用于OS/2
CCH Corel图表文件
CCM Lotus cc:邮箱(例如“INBOX.CCM”)
CCO CyberChat数据文件
CCT Macromedia Director Shockwave投影
CDA CD音频轨道
CDF Microsoft频道定义格式文件
CDI Philip的高密盘交互格式
CDM Visual dBASE自定义数据模块文件
CDR CorelDRAW绘图文件;原始音频CD数据文件
CDT CorelDRAW模板
CDX CorelDRAW压缩绘图文件;Microsoft Visual FoxPro索引文件
CEL CIMFast事件语言文件
CER 证书文件(MIME x-x509-ca-cert)
CFB Compton的多媒文件
CFG 配置文件
CFM CotdFusion模板文件;Visual dBASE Windows用户定制表单
CGI 公共网关接口脚本文件
CGM 计算机图形元文件
CH OS/2配置文件
CHK 由Windows磁盘碎片整理器或磁盘扫描保存的文件碎片
CHM 编译过的HTML文件
CHR 字符集(字体文件)
CHP Ventura Publisher章节文件
CHT ChartViem文件;Harvard Graphics矢量文件
CIF Adaptec CD 创建器 CD映像文件
CIL Clip Gallery下载包
CIM SimCity 2000文件
CIN OS/2改变控制文件用于跟踪INI文件中的变化
CK1 iD/Apogee Commander Keen 1数据文件
CK2 iD/Apogee Commander Keen 2数据文件
CK3 iD/Apogee Commander Keen 3数据文件
CK4 iD /Apogee Commander Keen 4数据文件
CK5 iD /Apogee Commander Keen 5数据文件
CK6 iD /Apogee Commander Keen 6数据文件
CLASS Java类文件
CLL Crick Software Clicker文件
CLP Windows 剪贴板文件
CLS Visual Basic类文件
CMD Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件
CMF Corel元文件
CMG Chessmaster保存的游戏文件
CMP JPEG位图文件;地址文档
CMV Corel Move动画文件
CMX Corel Presentation Exchange图像
CNF Telnet,Windows和其他其内格式会发生改变的应用程序使用的配置文件
CNM Windows应用程序菜单选项和安装文件
CNQ Compuworks Design Shop文件
CNT Windows(或其他)系统用于帮助索引或其他目的内容文件
COB TrueSpace 2对象文件
COD Microsoft C编译器产生的可显示机器码/汇编代码文件,其中附有源C代码作为注释
COM 命令文件(程序)
CPD,CPE 传真覆盖文档
CPI Microsoft MS-DOS代码页信息文件
CPL 控制面板扩展名,Corel颜色板
CPO Corel打印存储文件
CPP C++代码文件
CPR Corel提供说明书文件
CPT Corel 照片-绘画图像
CPX Corel Presentation Exchange压缩图形文件
CRD Windows Cardfile文件
CRP Corel 提供的运行时介绍文件;Visual dBASE自定义报表文件
CRT 认证文件
CSC Corel脚本文件
CSP PC Emcee On_Screen图像
CSS 瀑布式表格文件
CST Macromedia Director Cast文件
CSV 逗号分隔的值文件
CT Scitex CT位图文件;Paint Shop Pro Grapic编辑器文件
CTL 通常用于表示一个包含控件信息的文件;FaxWork用它来保持有关每个传真收到或发出的信息
CUE Microsoft提示牌数据文件
CUR Windows光标文件
CUT Dr Halo位图文件
CV Corel版本的档案文件;Microsoft CodeView信息屏幕文件
CWK ClarisWorks数据文件.
CWS ClarisWorks模块
CXT Macromedia Director受保护的(不可编辑的)投影文件
CXX C++源代码文件

常用扩展名及含义(D开头)

DAT 数据文件;WrodPerfect合并数据文件;用于一些MPEG格式的文件
DB Borland的Paradox 7表
DBC Microsoft Visual FoxPro数据库容器文件
DBF dBASE文件,一种由Ashton-Tate创建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和类似数据库或与数据库有关产品识别;可用数据文件(能被Excel 97打开);Oracle 8.1.x表格空间文件
DBX DataBearn图像;Microsoft Visual FoxPro表格文件
DCM DCM模块格式文件
DCR 冲击波文件
DCS 桌面颜色分隔文件
DCT Microsoft Visual FoxPro数据库容器
DCU Delphi编译单元文件
DCX Microsoft Visual FoxPro数据库容器;基于PCX的传真图像;宏
DC5 DataCAD绘图文件
DDF Btrieve或Xtrieve数据定义文件,它包含用于描述Btrieve或Xtrieve文件的元数据
DDIF Digital Equipment或 Compaq格式,用于保存他们图像与字处理文档
DEF SmartWareⅡ数据文件;C++模块定义文件
DEFI Oracle 7 卸载脚本文件
DEM 用于表示数字高度模型的USGS基准的文件
DER 认证文件
DEWF Macintosh Sound Cap/Sound Edit录音设备格式
DGN Macintosh 95 CAD绘图文件
DIB 设备无关位图
DIC 目录
DIF 可进行数据互换的电子表格
DIG DigiLink格式;Sound DesignerⅠ音频文件
DIR MacromediaDirector文件
DIZ 描述文件
DLG C++对话框脚本文件
DLL 动态链接库
DLS 可下载声音文件
DMD Visual dBASE数据模块文件
DMF X-Trakker音乐模块(MOD)文件
DOC FrameMaker或FrameBuilder文档;Word Star文档、Word Perfect文档、Microsoft Word文档;DisplayWrite文档
DOT Microsoft Word文档模板
DPL Borland Delph3压缩库
DPR Borland Delphi工程头文件
DRAW Acorn的基于对象的矢量图像文件
DRV 驱动程序
DRW Micrografx Designer/Draw;Pro/E绘画文件
DSF Micrografx Designer VFX文件
DSG DOOM保存的文件
DSM Dynamic Studio音乐模块(MOD)文件
DSP Microsoft Developer Studio工程文件
DSQ Corel QUERY(查询)文件
DST 刺绣机图形文件
DSW Microsoft Developer Studio工作区文件
DTA Word Bank(世界银行)的STARS数据文件
DTD SGML文档类型定义(DTD)文件
DTED 地面高度数字数据(图形的数据格式)文件
DTF Symantec Q&A相关的数据库数据文件
DTM DigiTrakker模块文件
DUN Microsoft拔号网络导出文件
DV 数字视频文件(MIME)
DWD DiamondWare数字化文件
DWG AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式
DXF 可进行互交换的绘图文件格式,二进制的DWG格式的文本表示;数据交换文件
DXR Macromedia Director受保护(不可编辑)电影文件
D64 Commodore的64位模拟磁盘图像文件

常用扩展名及含义(E开头)

EDA Ensoniq ASR磁盘映像
EDD 元素定义文档(FrameMaker+SGML文档)
EDE Ensoniq EPS磁盘映像
EDK Ensoniq KT磁盘映像
EDQ Ensoniq SQ1/SQ2/Ks32磁盘映像
EDS Ensoniq SQ80磁盘映像
EDV Ensoniq VFX-SD磁盘映像
EFA Ensoniq ASR文件
EFE Ensoniq EPS文件
EFK Ensoniq KT文件
EFQ Ensoniq SQ1/SQ2/Ks32文件
EFS Ensoniq SQ80文件
EFV Ensoniq VFX-SD文件
EMD ABT扩展模块
EMF Windows增强元文件
EML Microsoft Outlook Express邮件消息(MIME RTC822)文件
ENC 重演文件
ENFF 中性文件格式扩展名
EPHTML Perl解释增强HTML文件
EPS 压缩的PostScript图像
EPSF 压缩的PostScript文件
ERI ERWin文件
ERR 当RobooHELP帮助编译器企图编译一个帮助系统源文件时用来存储错误消息的文件
EPX ERWin文件
ESPS ESPS音频文件
EUI Ensoniq ESP家族的压缩磁盘映像
EVY 特使文档
EWL Microsoft Encarta文档
EXC Microsoft Word禁止字字典
EXE 可执行文件(程序)

常用扩展名及含义(F开头)

F FORTRAN文件
F2R Farandoyle线性模块格式
F3R Farandoyle分块线性模块格式
F77 FORTRAN文件
F90 FORTRAN文件
FAR Fradole Composer音乐模块(MOD)文件
FAV Microsoft Outlook导航条
FAX 传真类型图像
FBK Navison 金融备份
FCD 虚拟CD-ROM
FDB Navison 金融数据库
FDF Adobe Acrobat表单文档文件
FEM CADRE有限元素网络文件
FFA,FFL,FFO,FFK Microsoft快速查找文件
FFF GUS PnP银行文件格式
FH3 Als Freehand 3绘图文件
FIF Fractal图像文件
FIG REND386/AVRIL使用的文件格式
FITS CCD照相机图像;灵活图像传输系统
FLA Macromedia Flash电影
FLC Autodesk FLIC动画文件
FLF Corel Paradox产生的格式:Navison Financials许可文件;OS/2驱动程序文件
PLI Autodesk FLIC动画
FLT StarTrekker音乐模块(MOD)文件;MultiGen Inc的Open Flight使用的文件格式;Corel过滤器文件
FM Adobe FrameMaker文档
FMB Oracle4.0版或以后版本表单的二进制源代码文件
FML 文件镜象列表(GetRight)
FMT Oracle 4.0版或以后版本表单的文本格式;Microsoft Schele+ 打印文件
FMX Oracle 4.0版或以后版本可执行表单
FND Microsoft Explorer保存的搜索文件(Find applet)
FNG 字体组文件(字体导航器,Font Navigator)
FNK Funk Tracker模块格式
FOG Fontographer模块字体
FON 系统字体
FOR FORTRAN文件
FOT 字体相关文件
FP FileMaker Pro文件
FP1 Flying Pigs for Windows数据文件
FP3 FileMaker Pro文件
FPT FileMaker Pro文件;Microsoft Fox Pro备注字体文件
FPX FlashPix位图
FRM 表单;Frame Maker或Frame Builder文档;Oracle可执行表(3.0版或早期版本);Visual Basic表单;WordPerfect Merge表单;DataCAD标志报表文件
FRT Microsoft FoxPro报表文件
FRX Visual Basic表单文本;Microsoft FoxPro报表文件
FSF fPrint Audit Tool文件格式
FSL Borland的Paradox 7表单;Corel Paradox保存的表单
FSM Parandoyle示例格式
FT Lotus Notes全文本索引
FTG 全文本搜索组文件,由Windows帮助系统查找时产生——可以删除,并在需要时重建起来
FTS 全文本搜索引文件,由Windows帮助系统查找时产生
FW2 Framework Ⅱ文件
FW3 Framework Ⅲ文件
FW4 Framework Ⅳ文件
FXP 经Microsoft FoxPro编译的源文件
FZB Casio FZ-1银行转储
FZF Casio FZ-1完全转储
FZV Casio FZ-1声音转储

常用扩展名及含义(G开头)

G721 Raw CCITT G.721 $bit ADPCM格式数据
G723 Raw CCITT G.723 3或5bit ADPCM格式数据
GAL Corel多媒体管理器相集
GCD Generic CADD绘画文件(后续版本)
GCP Ground Control Point(地面控制点)文件,用于远景数据形成图像过程,经常用于生成图工程—CHIPS(copenhagen image processing system)使用这些文件
GDB InterBase数据库文件
GDM 铃声、口哨声和声音板模块格式
GED GEDCOM 系谱数据文件,用于记录和交换系谱数据的流行格式;图形环境文档绘画
GEM GEM元文件
GEN Ventura产生的文本文件
GetRight GetRight未完成的下载文件
GFC Patton&Patton FlowCharting 4 flowchart文件
GFI,GFX Genigraphics图形链接表示文件
GHO Norton 克隆磁盘映像
GID Windows 95全局索引文件(包括帮助状态)
GIF CompuServe位图文件
GIM,GIX Genigraphics图形链接介绍文件
GKH Ensoniq EPS家簇磁盘映像文件
GNA Genigraphics图形链接介绍文件
GNT 生成代码,Micro Focus属性格式里的可执行代码
GNX Genigraphics图形链接介绍文件
GRA Microsoft Graph文件
GRD 用于远程视景数据产生地图过程的格式文件,通常应用于形成地图工程—CHIPS(copenhagen image processing system)使用这些文件
GRF Grapher(Golden Software公司)图形文件
GRP 程序管理组
GSM Raw GSM 6.10音频流;Raw“byte aligned(比特对齐的)” GSM 6.10音频流;US Robotics语音调制解调器
GTK Graoumftracker(老)音乐模块(MOD)文件
GT2 Graoumftracker(新)音乐模块(MOD)文件
GWX,GWZ Cenigraphis图形链接介绍文件
GZ UNIX gzip压缩文件

常用扩展名及含义(H开头)

H C程序头文件
HCM IBM HCM配置文件
HCOM 声音工具HCOM格式
HCR IBM HCD/HCM产品配置文件
HDF 高级计算机应用程序本地中心(NCSA) geospatial Hierarchial数据格式文件
HED HighEdit文档
HEL Microsoft Hellbender格式保存的游戏文件
HEX Macintosh BinHex2.0文件
HGL HP图形语言绘图文件
HH 映射文件,包括一些话题ID和在帮助文件系统中话题的映射数字—允许运行中应用程序发送给用户合适的上下文帮助话题
HLP 帮助文件;Date CAD Windows帮助文件
HOG Lucas Arts的Dark Forces WAD文件
HPJ Visual Basic帮助工程
HPP C++程序头文件
HQX Macintosh BinHex 4.0文件
HST 历史文件
HT HyperTerminal(超级终端)
HTM,HTML 超文本文档
HTT Microsoft超文本模板
HTX 扩展HTML模板
HXM Descent2 HAM文件扩展

常用扩展名及含义(I开头)

ICA Citrix文件
ICB Targa位图文件
ICC Kodak打印机格式文件
ICL 图标库文件
ICM 图形颜色匹配配置文件
ICO Windows图标
IDB MSDev中间层文件
IDD MIDI设备定义
IDF MIDI设备定义(Windows 95需要的文件)
IDQ Internet数据查询文件
IDX Microsoft FoxPro相关数据库索引文件;Symantec Q&A相关数据库索引文件;Microsoft Outlook Express文件
IFF 交换格式文件;Amiga ILBM
IGES 初始图形交换说明文件
IGF 插入系统元文件
IIF QuickBooks for Windows交换文件
ILBM 位图图形文件
IMA WinImage磁盘映像文件
IMG GEM映像
IMZ WinImage压缩磁盘映像文件
INC 汇编语言或动态服务器包含文件
INF 信息文件
INI 初始化文件;MWave DSP Synth的“nwsynth.ini” GMS安装;Cravis Ultrasound bank安装
INP Oracle 3.0版或早期版本的表单源代码
INRS INRS远程通信声频
INS InstallShield安装脚本;X-Internet签字文件;Ensoniq EPS字簇设备;Cell/ⅡMAC/PC抽样设备
INT 中间代码,当一个源程序经过语法检查后编译产生一个可执行代码
IOF Findit文档
IQY Microsoft Internet查询文件
ISO 根据ISD 9660有关CD-ROM文件系统标准列出CD-ROM上的文件
ISP X-Internet签字文件
IST 数字跟踪设备文件
ISU InstallShield卸装脚本
IT 脉冲跟踪系统音乐模块(MOD)文件
ITI 脉冲跟踪系统设备
ITS 脉冲跟踪系统抽样,Internet文档位置
IV Open Inventor中使用的文件格式
IVD 超过20/20微观数据维数或变量等级文件
IVP 超过20/20的用户子集配置文件
IVT 超过20/20表或集合数据文件
IVX 超过20/20微数据目录文件
IW Idlewild屏幕保护程序
IWC Install Watch文档

常用扩展名及含义(J开头)

J62 Ricoh照相机格式
JAR Java档案文件(一种用于applet和相关文件的压缩文件)
JAVA Java源文件
JBF Paint Shop Pro图像浏览文件
JFF,JFIF,JIF JPEG文件
JMP SAS的JMPDiscovery表格统计文件
JN1 Epic MegaGames的Jill of the Jungle数据文件
JPE,JPEG,JPG JPEG图形文件
JS javascript源文件
JSP HTML网页,其中包含有对一个Java servlet的参考
JTF JPEG位图文件

常用扩展名及含义(K开头)

K25 Kurzweil 2500抽样文件
KAR 卡拉OK MIDI文件(文本+MIDI)
KDC Kodak光增强器
KEY DataCAD图标工具条文件
KFX KoFak Group 4图像文件
KIZ Kodak数字明信片文件
KKW RoboHELP帮助工程索引设计器中与主题无关的K开头的所有关键字
KMP Korg Trinity KeyMap文件
KQP Konica照相机本地文件
KR1 Kurzweil 2000抽样(多软驱)文件
KRZ Kurzweil 2000抽样文件
KSF Korg Trinity抽样文件
KYE Kye游戏数据

常用扩展名及含义(L开头)

LAB Visual dBASE标签文件
LBM Deluxe Paint位图文件
LBT,LBX Microsoft FoxPro标签文件
LDB Microsoft Access加锁文件
LDL Corel Paradox分发库
LEG Legacy文档
LES Logitech娱乐系统游戏配置文件(与REC文件一样)
LFT 3D Studio(DOS)放样文件
LHA LZH更换文件后缀
LIB 库文件
LIN DataCAD线型文件
LIS 结构化查询报告(SQR)程序产生的输出文件
LLX Laplink交换代理
LNK Windows快捷方式文件
LOG 日志文件
LPD Helix Nut和Bolt文件
LRC Intel可视电话文件
LSL Corel Paradox保存的库文件
LSP AutoLISP、CommonLISP和其他LISP语言文件
LST 列表文件
LU ThoughtWing库单元文件
LVL Parallax Software的 Miner Descent/D2 Level扩展
LWLO Lightwave分层对象文件
LWOB Lightwave对象文件
LWP Lotus WordPro 96/97文件
LWSC Lightwave视景文件
LYR DataCAD层文件
LZH LH ARC压缩档案
LZS Skyroads数据文件

常用扩展名及含义(M开头)

M1V MPEG相关文件(MIME“mpeg”类型)
M3D Corel Motion 3D动画文件
M3U MPEG URL(MIME声音文件)
MAC MacPaint图像文件
MAD Microsoft Access模块文件
MAF Microsoft Access表单文件
MAG 在一些日本文件中发现的图形文件格式
MAGIC 魔力邮件监视器配置文件
MAK Visual Basil或Microsoft Visual C++工程文件
MAM Microsoft Access宏
MAN UNIX手册页输出
MAP 映射文件;Duke Nukem 3D WAD游戏文件
MAQ Microsoft Access查询文件
MAR Microsoft Access报表文件
MAS Lotus Freelance Graphics Smart Master文件
MAT Microsoft Access表;3D Studio MAX材料库
MAUD MAUD抽样格式
MAX Kinetx的3DStudio MAX文件;该格式用于一个3D场景文件;Paperport文件;OrCAD设计文件
MAZ Hover迷路数据;Division的dVS/dVISE使用的文件格式
MB1 Apogee Monster Bash数据文件
MBOX Berkeley Unix邮箱格式
MBX Microsoft Outlook保存email格式;Eudora邮箱
MCC Dailerl0呼叫卡
MCP Metrowerks CodeWarrior工程文件
MCR DataCAD键盘宏文件
MCW Microsoft Word的Macintosh文档
MDA Microsoft Access内抽入器;Microsoft Access 2.0版及其后续版本的工作组事件
MDB Microsoft Access数据库
MDE Microsoft Access MDE文件
MDL 数字跟踪器音乐模块(MOD)文件;Quake模 块文件
MDN Microsoft Access空数据库模板
MDW Microsoft Access工作组文件
MDZ Microsoft Access向导模板文件
MED 音乐编辑器,OctaMED音乐模块(MOD)文件
MER 电子表格/数据库数据交换格式;FileMaker、Excel及其他软件能识别
MET 表示管理器元文件
MFG Pro/ENGINEER制造文件
MGF 在材料与几何学里的文件格式
MHTM,MHTML MHTML文档(MIME)
MI 杂项
MIC Microsoft Image Composer文件
MID MIDI音乐
MIF Adobe FramMaker交换格式
MIFF 与机器无关格式文件
MIM,MIME,MME Internet邮件扩展格式的多用途文件,经常作为发送e-mail时在AOL里附件而创建的文件;在一个多区MIM文件里的文件能用WinZip或其他类似程序打开
MLI 3D Studio的材料库格式文件
MMF Meal Master格式;一个处方类格式;Microsoft邮件文件
MMG 超过20/20表或集会数据文件
MMM Microsoft多媒体电影
MMP Mindmapor Mind Manager文件
MN2 Descent2任务文件
MND,MNI Mandelbort for Windows
MNG 多映像网络图形
MNT,MNX Microsoft FoxPro菜单文件
MNU Visual dBASE菜单文件;Intertel Systems Interact菜单文件
MOD Fast Tracker、Star Trekker、Noise Tracker(等等)音乐模块文件;Microsoft多计划电子表格;Amiga/PC磁道文件
MOV QuickTime for Windows电影
MP2 第二层MPEG音频文件
MP3 第三层MPEG音频文件
MPA MPEG相关文件,MIME“mpeg类型”
MPE,MPEG,MPG MPEG动画文件
MPP Microsoft工程文件;CAD绘图文件格式
MPR Microsoft FoxPro菜单(已编译)
MRI MRI扫描文件
MSA 魔术阴影档案
MSDL Manchester的场景描述语言
MSG Microsoft邮件消息
MSI Windows 安装器包
MSN Microsoft网络文档;Descent Mission文件
MSP Microsoft Paint(画图)位图文件;Windows Installer路径文件
MST Windows 安装器传输文件
MTM Multi 跟踪器音乐模块(MOD)文件
MUL Ultima在线
MUS 音乐
MUS10 Mus10声音
MVB Microsoft多媒体查看器文件
MWP Lotus WordPro 97 Smart Master文件

常用扩展名及含义(N开头)

NAP NAP元文件
NCB Microsoft Developer Studio文件
NCD Norton改变目录
NCF NetWare命令文件;Lotus Notes内部剪切板
NDO 3D 低多边形建模器,Nendo
netCDF 网络公用数据表单
NFF 中性文件格式
NFT NetObject Fusion模板文件
NIL Norton光标库文件(EasyIcons-兼容)
NIST NIST Sphere声音
NLB Oracle 7数据
NLM NetWare可装载模块
NLS 用于本地化的国家语言支持文件(例如,Uniscape)
NLU Norton Live Update e-mail 触发器文件
NOD NetObject Fusion文件
NSF Lotus Notes数据库
NSO NetObject Fusion文档文件 t多媒体查看器文件
MWP Lotus WordPro 97 Smart Master文件

NST Noise Tracker音乐模块(MOD)文件
NS2 Lotus Notes数据库(第二版)
NTF Lotus Notes数据库模板
NTX CA-Clipper索引文件
NWC Noteworthy Composer歌曲文件
NWS Microsoft Outlook Express新闻消息(MIME RFC822)

常用扩展名及含义(O开头)

O01 台风声音文件
OBD Microsoft Office活页夹
OBJ 对象文件
OBZ Microsoft Office活页夹向导
OCX Microsoft对象链接与嵌入定制控件
ODS Microsoft Outlook Express邮箱文件
OFF 3D 网状物对象文件格式
OKT Oktalyzer音乐模块(MOD)文件
OLB OLE对象库
OLE OLE对象
OOGL 面向对象图形库
OPL 组织者编程语言源文件——Psion/Symbian
OPO OPL输出可执行文件
OPT Microsoft Developer Studio文件
OPX OPL扩展DLL(动态链接库)
ORA Oracle 7 配置文件
ORC Oracle 7脚本文件
ORG Lotus Organ

G. 数字签名加密算法

这个问题 如果不是专业人员估计累死你也找不到这样的文章。
想自学 就必须要有深刻的技术 另外其中用到很多高数问题的。
那些算法例子不用去看 越看越乱。
学一些 语言:C JAVA 什么的 还有 数学一定要过关如果数学不好的话 技术会了语言也没用 因为其中的算法你没法编译那么就不是一个好的加密程序。
如果能弄会OK了。

H. 紧急求助C++问题,快速解决另加高分。

完全按楼主要求,代码如下:
#include <iostream>
#include <cstring>
using namespace std;
class Message
{
public:
Message(char* p)
{
s = new char[100];
strcpy(s, p);
}
~Message()
{
delete []s;
}
protected:
char* s;
};

class Encrypt:public Message
{
public:
Encrypt(char* p):Message(p)
{
str = new char[100];
strcpy(str, p);
}
~Encrypt()
{
delete []str;
}
void fun();
void show();
operator char*()
{
return str;
}
private:
char* str;
};

class Decrypt:public Message
{
public:
Decrypt(char* p):Message(p)
{
str = new char[100];
strcpy(str, p);
}
~Decrypt()
{
delete []str;
}
void fun();
void show();
private:
char* str;
};

void Encrypt::fun()
{
int i;
for (i = 0; i != strlen(str); ++i)
{
if (str[i] >= 'A' && str[i] <= 'P')
{
str[i] += 10;
}
else if (str[i] >= 'Q' && str[i] <= 'Z')
{
str[i] -= 16;
}
else if (str[i] >= 'a' && str[i] <= 'j')
{
str[i] += 16;
}
else if (str[i] >= 'k' && str[i] <= 'z')
{
str[i] -= 10;
}
}
}

void Encrypt::show()
{
cout << str;
cout << endl;
}

void Decrypt::fun()
{
int i;
for (i = 0; i != strlen(str); ++i)
{
if (str[i] >= 'a' && str[i] <= 'p')
{
str[i] += 10;
}
else if (str[i] >= 'q' && str[i] <= 'z')
{
str[i] -= 16;
}
else if (str[i] >= 'A' && str[i] <= 'J')
{
str[i] += 16;
}
else if (str[i] >= 'K' && str[i] <= 'Z')
{
str[i] -= 10;
}
}
}

void Decrypt::show()
{
cout << str;
cout << endl;
}

void main()
{
char input[100];
cout << "输入字符串:" << endl;
gets(input);
Encrypt e(input);
cout << "原文为:";
e.show();
e.fun();
cout << "密文为:";
e.show();
Decrypt d((char*)e);
cout << "密文为:";
d.show();
d.fun();
cout << "解密后为:";
e.show();
}

I. Java中 DES加密算法

package des;
import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;
import sun.misc.*;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.spec.SecretKeySpec;
import java.security.*;
import javax.crypto.SecretKeyFactory;
import java.security.spec.*;
import javax.crypto.spec.DESedeKeySpec;
/**
解密
*/
class DES {
private static String Algorithm = "DESede";//加密算法的名称
private static Cipher c;//密码器
private static byte[] cipherByte;
private static SecretKey deskey;//密钥
private static String keyString = "";//获得密钥的参数
//对base64编码的string解码成byte数组
public byte[] deBase64(String parm) throws IOException {
BASE64Decoder dec=new BASE64Decoder();
byte[] dnParm = dec.decodeBuffer(parm);
System.out.println(dnParm.length);
System.out.println(dnParm);
return dnParm;
}
//把密钥参数转为byte数组
public byte[] dBase64(String parm) throws IOException {
BASE64Decoder dec=new BASE64Decoder();
byte[] dnParm = dec.decodeBuffer(parm);
return dnParm;
}
/**
* 对 Byte 数组进行解密
* @param buff 要解密的数据
* @return 返回加密后的 String
*/
public static String createDecryptor(byte[] buff) throws
NoSuchPaddingException, NoSuchAlgorithmException,
UnsupportedEncodingException {
try {
c.init(Cipher.DECRYPT_MODE, deskey);//初始化密码器,用密钥deskey,进入解密模式
cipherByte = c.doFinal(buff);
}
catch(java.security.InvalidKeyException ex){
ex.printStackTrace();
}
catch(javax.crypto.BadPaddingException ex){
ex.printStackTrace();
}
catch(javax.crypto.IllegalBlockSizeException ex){
ex.printStackTrace();
}
return (new String(cipherByte,"UTF-8"));
}
public void getKey(String key) throws IOException, InvalidKeyException,
InvalidKeySpecException {
byte[] dKey = dBase64(key);
try {
deskey=new javax.crypto.spec.SecretKeySpec(dKey,Algorithm);
c = Cipher.getInstance(Algorithm);
}
catch (NoSuchPaddingException ex) {
}
catch (NoSuchAlgorithmException ex) {
}
}

public static void main(String args[]) throws IOException,
NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeySpecException,
InvalidKeyException, IOException {
DES des = new DES();
des.getKey(keyString);//获取密钥
byte[] dBy = des.deBase64("t0/fDOZ5NaQ=");//获取需要解密的字符串
String dStr = des.createDecryptor(dBy);
System.out.println("解密:"+dStr);
}
}

J. DES加密算法C语言实现

/*********************************************************************/
/*-文件名:des.h */
/*- */
/*-功能: 实现DES加密算法的加密解密功能 */
/*********************************************************************/
typedef int INT32;
typedef char INT8;
typedef unsigned char ULONG8;
typedef unsigned short ULONG16;
typedef unsigned long ULONG32;

/*如果采用c++编译器的话采用如下宏定义
#define DllExport extern "C" __declspec(dllexport)
*/

#define DllExport __declspec(dllexport)

/*加密接口函数*/
DllExport INT32 DdesN(ULONG8 *data, ULONG8 **key, ULONG32 n_key,ULONG32 readlen);
DllExport INT32 desN(ULONG8 *data, ULONG8 **key, ULONG32 n_key,ULONG32 readlen);
DllExport INT32 des3(ULONG8 *data, ULONG8 *key,ULONG32 n ,ULONG32 readlen);
DllExport INT32 Ddes3(ULONG8 *data,ULONG8 *key,ULONG32 n ,ULONG32 readlen);
DllExport INT32 des(ULONG8 *data, ULONG8 *key,INT32 readlen);
DllExport INT32 Ddes(ULONG8 *data,ULONG8 *key,INT32 readlen);

*********************************************************************/
/*-文件名:des.c */
/*- */
/*-功能: 实现DES加密算法的加密解密功能 */
//*********************************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <malloc.h>
#include "des.h"

#define SUCCESS 0
#define FAIL -1

#define READFILESIZE 512

#define WZ_COMMEND_NUM 4
#define WZUSEHELPNUM 19
#define DESONE 1
#define DESTHREE 2
#define DESMULTI 3
INT8 *WZ_Commend_Help[] =
{

"基于DES的加密解密工具v1.0 ",/*0*/
"追求卓越,勇于创新 ",
"----着者 : 吴真--- ",
" "
};

INT8 *WZ_USE_HELP[]={
"输入5+n个参数:",
"\t1.可执行文件名 *.exe",
"\t2.操作类型 1:一层加密;2:一层解密;",
"\t\t13:N层单密钥加密;23:N层单密钥解密;",
"\t\t39:N层多密钥加密;49:N层多密钥解密",
"\t3.读出数据的文件名*.txt",
"\t4.写入数据的文件名*.txt",
"\t5.密钥(8字节例如:wuzhen12)",
"\t[6].N层单密钥的层数或者...二层加密|解密密钥",
"\t[7].三层加密|解密密钥",
"\t[8]. ...",
"\t[N].N层加密|解密密钥",
"\t 例1: des 1 1.txt 2.txt 12345678",
"\t : des 2 2.txt 3.txt 12345678",
"\t 例2: des 13 1.txt 2.txt tiantian 5",
"\t : des 23 2.txt 3.txt tiantian 5",
"\t 例3: des 39 1.txt 2.txt 12345678 tiantian gaoxinma",
"\t : des 49 2.txt 3.txt 12345678 tiantian gaoxinma",
"******************************"
};

INT32 hextofile( ULONG8 *buf ,FILE *writefile, ULONG32 length);/*以16进制写入文件*/
INT32 encodehex(ULONG8 *tobuf,ULONG8 *frombuf,ULONG32 len);/*16进制解码*/

INT32 file_enc(FILE *readfile,FILE *writefile,
ULONG8 *key,ULONG32 keynum,
ULONG8 **superkey,ULONG32 n_superkey,
ULONG8 flag);
INT32 file_dec(FILE *readfile,FILE *writefile,
ULONG8 *key,ULONG32 keynum,
ULONG8 **superkey,ULONG32 n_superkey,
ULONG8 flag);
void wz_print_help();

INT32 main(INT32 argc,INT8 *argv[])
{
INT8 *FILENAME1,*FILENAME2;
FILE *fp, *fp2;
ULONG8 *key ;
ULONG8 **superkey ;/*n层加密解密密钥*/
ULONG8 n_superkey ;
ULONG32 num;

if ( argc >= 5 && (atoi(argv[1]) == 39 || atoi(argv[1]) == 49 ) )
{
n_superkey = argc - 4 ;
superkey = ( INT8 **)calloc(1, n_superkey*sizeof( void *) ) ;
for ( num = 0 ; num < n_superkey ; num++)
{
superkey[num] = argv[4+num] ;
}

}
else if ( argc == 6 && (atoi(argv[1]) == 13 || atoi(argv[1]) == 23 ) && (atoi(argv[5])) > 0)
{

}
else if ( argc == 5 && ( atoi(argv[1]) == 1 || atoi(argv[1]) == 2 ))
{

}
else
{
wz_print_help();
return FAIL;
}
FILENAME1 = argv[2];
FILENAME2 = argv[3];
if ((fp= fopen(FILENAME1,"rb")) == NULL || (fp2 = fopen(FILENAME2,"wb"))==NULL)
{

printf("Can't open file\n");
return FAIL;
}

key = argv[4] ;
switch( atoi(argv[1] ))
{
case 1: /*加密*/
file_enc(fp,fp2,key,0, NULL,0, DESONE);
printf("\n \tDES 一层加密完毕,密文存于%s文件\n",FILENAME2);
break;
case 2:
file_dec(fp,fp2,key,0, NULL, 0,DESONE);
printf("\n \tDES 一层解密完毕,密文存于%s文件\n",FILENAME2);
break;
case 13:
file_enc(fp,fp2,key,atoi(argv[5]),NULL,0,DESTHREE);
printf("\n \tDES %u层单密钥加密完毕,密文存于%s文件\n",atoi(argv[5]),FILENAME2);
break;
case 23:
file_dec(fp,fp2,key,atoi(argv[5]),NULL,0,DESTHREE);
printf("\n \tDES %u层单密钥解密完毕,密文存于%s文件\n",atoi(argv[5]),FILENAME2);
break;
case 39:
file_enc(fp,fp2,NULL,0,superkey,n_superkey,DESMULTI);
printf("\n \tDES 多密钥加密完毕,密文存于%s文件\n",FILENAME2);
free(superkey);
superkey = NULL;
break;
case 49:
file_dec(fp,fp2,NULL,0,superkey,n_superkey,DESMULTI);
printf("\n \tDES 多密钥加密完毕,密文存于%s文件\n",FILENAME2);
free(superkey);
superkey = NULL;
break;
default:
printf("请选择是加密|解密 plese choose encrypt|deencrypt\n");
break;
}

fclose(fp);
fclose(fp2);
return SUCCESS;

}

void wz_print_help()
{
INT32 i ;
printf("\t");
for ( i = 0 ; i < 22 ; i++)
{
printf("%c ",5);
}
printf("\n");
for( i = 0 ; i < WZ_COMMEND_NUM ; i++)
{
printf("\t%c\t%s %c\n",5,WZ_Commend_Help[i],5);
}
printf("\t");
for ( i = 0 ; i < 22 ; i++)
{
printf("%c ",5);
}
printf("\n");
for( i = 0 ; i < WZUSEHELPNUM ; i++)
{
printf("\t%s\n",WZ_USE_HELP[i]);
}
return ;
}

INT32 file_enc(FILE *readfile,FILE *writefile,
ULONG8 *key,ULONG32 keynum,
ULONG8 **superkey,ULONG32 n_superkey,
ULONG8 flag)
{
INT32 filelen = 0,readlen = 0,writelen = 0;
ULONG32 totalfilelen = 0 ;/*统计实际的文件的长度*/
ULONG8 readbuf[READFILESIZE] = { 0 };
filelen = fread( readbuf, sizeof( INT8 ), READFILESIZE, readfile );
while( filelen == READFILESIZE )
{
totalfilelen += READFILESIZE;
switch(flag)
{
case DESONE:
des( readbuf,key,READFILESIZE);
break;
case DESTHREE:
des3( readbuf, key ,keynum,READFILESIZE);
break;
case DESMULTI:
desN( readbuf, superkey ,n_superkey,READFILESIZE);
break;
}
hextofile( readbuf, writefile, READFILESIZE );/*以16进制形式写入文件*/
memset(readbuf,0,READFILESIZE);
filelen = fread( readbuf, sizeof( INT8 ), READFILESIZE, readfile );
}
/*这是从文件中读出的最后一批数据,长度可能会等于0,所以要先判断*/

if ( filelen > 0 )
{
/*如果从文件中读出的长度不等于0,那么肯定有8个字节以上的空间
文件长度存在最后8个字节中*/
totalfilelen += filelen;
memcpy( &readbuf[READFILESIZE-8], (ULONG8*)&totalfilelen,4);
switch(flag)
{
case DESONE:
des( readbuf,key,READFILESIZE);
break;
case DESTHREE:
des3( readbuf, key ,keynum,READFILESIZE);
break;
case DESMULTI:
desN( readbuf, superkey ,n_superkey,READFILESIZE);
break;
}
hextofile( readbuf, writefile,READFILESIZE );/*以16进制形式写入文件*/
memset(readbuf,0 ,READFILESIZE);
}
else /*filelen == 0*/
{
memcpy( &readbuf[0], (ULONG8*)&totalfilelen,4);
switch(flag)
{
case DESONE:
des( readbuf,key,8);
break;
case DESTHREE:
des3( readbuf, key ,keynum,8);
break;
case DESMULTI:
desN( readbuf, superkey ,n_superkey,8);
break;
}
hextofile( readbuf, writefile, 8);/*以16进制形式写入文件*/
}
return SUCCESS;
}

INT32 file_dec(FILE *readfile,FILE *writefile,
ULONG8 *key,ULONG32 keynum,
ULONG8 **superkey,ULONG32 n_superkey,
ULONG8 flag)
{
INT32 filelen = 0,readlen = 0,writelen = 0;
ULONG32 totalfilelen = 0 ;/*统计实际的文件的长度*/
INT32 num = 0;
ULONG8 readbuf[READFILESIZE] = { 0 };
ULONG8 sendbuf[READFILESIZE*2] = { 0 };

fseek(readfile,-16,SEEK_END);/*最后16个字节的表示文件长度的空间*/
filelen = fread( sendbuf, sizeof( INT8 ), 16, readfile );
encodehex( readbuf,sendbuf,8);
switch(flag)
{
case DESONE:
Ddes( readbuf,key,8);
break;
case DESTHREE:
Ddes3( readbuf, key ,keynum,8);
break;
case DESMULTI:
DdesN( readbuf, superkey ,n_superkey,8);
break;
}
/*解密*/
memcpy((ULONG8*)&totalfilelen, &readbuf[0],4);/*得到文件总长*/
memset(readbuf,0 ,8);
memset(sendbuf,0 ,16);

num = totalfilelen/READFILESIZE;/*有几个READFILESIZE组*/
totalfilelen %= READFILESIZE;

fseek(readfile,0,SEEK_SET);/*跳到文件头*/
while(num--)
{
filelen = fread( sendbuf, sizeof( INT8 ), READFILESIZE*2, readfile );
encodehex( readbuf,sendbuf,READFILESIZE);
switch(flag)
{
case DESONE:
Ddes( readbuf,key,READFILESIZE);
break;
case DESTHREE:
Ddes3( readbuf, key ,keynum,READFILESIZE);
break;
case DESMULTI:
DdesN( readbuf, superkey ,n_superkey,READFILESIZE);
break;
}

writelen = fwrite(readbuf, sizeof( INT8 ), READFILESIZE, writefile);
memset(readbuf,0 ,READFILESIZE);
memset(sendbuf,0 ,READFILESIZE*2);
}
if ( totalfilelen > 0 )/*最后一块有多余的元素*/
{
filelen = fread( sendbuf, sizeof( INT8 ), READFILESIZE*2, readfile );
encodehex( readbuf,sendbuf,READFILESIZE);
switch(flag)
{
case DESONE:
Ddes( readbuf,key,READFILESIZE);
break;
case DESTHREE:
Ddes3( readbuf, key ,keynum,READFILESIZE);
break;
case DESMULTI:
DdesN( readbuf, superkey ,n_superkey,READFILESIZE);
break;
}
writelen = fwrite(readbuf, sizeof( INT8 ), totalfilelen, writefile);
memset(readbuf,0 ,READFILESIZE);
memset(sendbuf,0 ,READFILESIZE*2);

}
return SUCCESS;
}

INT32 hextofile( ULONG8 *buf ,FILE *writefile, ULONG32 length)
{
ULONG32 writelen = 0 ;
/*以16进制形式写入文件*/
while( writelen < length)
{
if(buf[writelen] == 0)
{
fprintf( writefile, "%x", 0 );
fprintf( writefile, "%x", 0 );
}
else if (buf[writelen] < 0x10)
{
fprintf( writefile, "%x", 0 );
fprintf( writefile, "%x", buf[writelen] );
}
else
{
fprintf( writefile, "%x", buf[writelen] );

}
writelen++;

}
return SUCCESS;
}
INT32 encodehex(ULONG8 *tobuf,ULONG8 *frombuf,ULONG32 len)
{
ULONG8 *readfirst = frombuf ;
ULONG8 *readend = &frombuf[1] ;
INT8 *s;
ULONG8 y[2] ;
ULONG32 i;
for ( i = 0 ; i < len ; i++)
{
y[0] = *readfirst ;
y[1] = *readend ;
readfirst += 2 ;
readend += 2 ;
tobuf[i] = (ULONG8)strtol((INT8*)y, &s, 16);
}
return SUCCESS;
}

热点内容
文件夹嗅探器foldersniffer 发布:2025-05-20 12:33:36 浏览:912
编译装入 发布:2025-05-20 12:32:48 浏览:562
万胜压缩机价格 发布:2025-05-20 12:20:00 浏览:987
判断云服务器是否诚实的存放数据 发布:2025-05-20 12:11:07 浏览:377
c语言基础书 发布:2025-05-20 12:11:00 浏览:780
java小数正则表达式 发布:2025-05-20 11:30:58 浏览:136
文件夹加密win7 发布:2025-05-20 11:27:46 浏览:837
压缩文件设置密码有什么意思 发布:2025-05-20 11:26:37 浏览:551
造梦西游qq登录如何修改密码 发布:2025-05-20 11:18:36 浏览:382
淘宝缓存清理后还是大 发布:2025-05-20 11:15:39 浏览:149