dec加密演算法
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;
}