




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
/**java版的
*<p>Title:DES加解密算法</p>
*<p>Description:DES加解密算法</p>
*<p>Copyright:Copyright(c)2004</p>
*<p>Company:AspireCorp</p>
*@authorzhangji
*@version1.0
*/
importjava.security.*;
importjavax.crypto.*;
publicclassDES{
privatestaticStringstrDefaultKey="hnzt";
privateCipherencryptCipher=null;
privateCipherdecryptCipher=null;
/**
*將byte數組轉換為表示16進制值的字符串,
*如:byte[]{8,18}轉換為:0813,
*和publicstaticbyte[]hexStr2ByteArr(StringstrIn)
*互為可逆的轉換過程
*@paramarrB需要轉換的byte數組
*@return轉換后的字符串
*@throwsException本方法不處理任何異常,所有異常全部拋出
*/
publicstaticStringbyteArr2HexStr(byte[]arrB)
throwsException
{
intiLen=arrB.length;
//每個byte用兩個字符才能表示,所以字符串的長度是數組長度的兩倍
StringBuffersb=newStringBuffer(iLen*2);
for(inti=0;i<iLen;i++)
{
intintTmp=arrB[i];
//把負數轉換為正數
while(intTmp<0){
intTmp=intTmp+256;
}
//小于0F的數需要在前面補0
if(intTmp<16){
sb.append("0");
}
sb.append(Integer.toString(intTmp,16));
}
returnsb.toString();
}
/**
*將表示16進制值的字符串轉換為byte數組,
*和publicstaticStringbyteArr2HexStr(byte[]arrB)
*互為可逆的轉換過程
*@paramstrIn需要轉換的字符串
*@return轉換后的byte數組
*@throwsException本方法不處理任何異常,所有異常全部拋出
*@author<ahref="mailto:zhangji@">ZhangJi</a>
*/
publicstaticbyte[]hexStr2ByteArr(StringstrIn)
throwsException
{
byte[]arrB=strIn.getBytes();
intiLen=arrB.length;
//兩個字符表示一個字節,所以字節數組長度是字符串長度除以2
byte[]arrOut=newbyte[iLen/2];
for(inti=0;i<iLen;i=i+2)
{
StringstrTmp=newString(arrB,i,2);
arrOut[i/2]=(byte)Integer.parseInt(strTmp,16);
}
returnarrOut;
}
/**
*默認構造方法,使用默認密鑰
*@throwsException
*/
publicDES()
throwsException
{
this(strDefaultKey);
}
/**
*指定密鑰構造方法
*@paramstrKey指定的密鑰
*@throwsException
*/
publicDES(StringstrKey)
throwsException
{
Security.addProvider(newvider.SunJCE());
Keykey=getKey(strKey.getBytes());
encryptCipher=Cipher.getInstance("DES");
encryptCipher.init(Cipher.ENCRYPT_MODE,key);
decryptCipher=Cipher.getInstance("DES");
decryptCipher.init(Cipher.DECRYPT_MODE,key);
}
/**
*加密字節數組
*@paramarrB需加密的字節數組
*@return加密后的字節數組
*@throwsException
*/
publicbyte[]encrypt(byte[]arrB)
throwsException
{
returnencryptCipher.doFinal(arrB);
}
/**
*加密字符串
*@paramstrIn需加密的字符串
*@return加密后的字符串
*@throwsException
*/
publicStringencrypt(StringstrIn)
throwsException
{
returnbyteArr2HexStr(encrypt(strIn.getBytes()));
}
/**
*解密字節數組
*@paramarrB需解密的字節數組
*@return解密后的字節數組
*@throwsException
*/
publicbyte[]decrypt(byte[]arrB)
throwsException
{
returndecryptCipher.doFinal(arrB);
}
/**
*解密字符串
*@paramstrIn需解密的字符串
*@return解密后的字符串
*@throwsException
*/
publicStringdecrypt(StringstrIn)
throwsException
{
returnnewString(decrypt(hexStr2ByteArr(strIn)));
}
/**
*從指定字符串生成密鑰,密鑰所需的字節數組長度為8位
*不足8位時后面補0,超出8位只取前8位
*@paramarrBTmp構成該字符串的字節數組
*@return生成的密鑰
*@throwsjava.lang.Exception
*/
privateKeygetKey(byte[]arrBTmp)
throwsException
{
//創建一個空的8位字節數組(默認值為0)
byte[]arrB=newbyte[8];
//將原始字節數組轉換為8位
for(inti=0;i<arrBTmp.length&&i<arrB.length;i++)
{
arrB[i]=arrBTmp[i];
}
//生成密鑰
Keykey=newjavax.crypto.spec.SecretKeySpec(arrB,"DES");
returnkey;
}
/**
*單元測試方法
*@paramargs
*/
publicstaticvoidmain(String[]args)
{
StringstrOriginal="1111";
StringstrOp="-de";
//檢查入參個數
if(args.length==2){
strOp=args[0];
strOriginal=args[1];
}
else{
System.out.println("WrongParametercount,tryuse\"javaDES-de|-en'thestringyouwanttobeEncrypted'\"");
System.out.println("NowdoEncryptwith\"1111\"");
try{
DESdes=newDES();
//加密測試
System.out.println("*****加密測試*****");
des.enTest("1111");
//解密測試
System.out.println("*****解密測試*****");
des.deTest("0fc7648b53e54cfb");
}catch(Exceptionex){
ex.printStackTrace();
}
return;
}
try{
if(strOp.equals("-de")){
DESdes=newDES();
des.deTest(strOriginal);
}
elseif(strOp.equals("-en")){
DESdes=newDES();
des.enTest(strOriginal);
}
else{
System.out.println("Wrongoperater,tryuse\"javaDES-de|-en'thestringyouwanttobeEncrypted'\"");
System.out.println("NowdoEncryptwith\"1111\"");
}
}
catch(Exceptionex)
{
ex.printStackTrace();
}
}
/**
*單元測試方法,打印對指定字符串加密后的字符串
*/
privatevoidenTest(StringstrOriginal)
{
try
{
System.out.println("Plain
String:"+strOriginal);
StringstrEncrypt=encrypt(strO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五授權產品銷售協議書范例
- 二零二五業務員聘用協議聘用業務員協議書
- 二零二五版股權轉讓的合同承諾書
- 行吊作業安全規范
- 2025年護士執業資格考試題庫-急危重癥護理學專項核心知識測試試卷
- 2025年安全生產考試題庫(行業安全規范)-石油化工專業試題卷
- 2025年鄉村醫生考試題庫:農村婦幼保健疾病康復試題
- 2025年書法教師職業能力測試卷:書法教師職業素養與團隊協作能力試題
- 2025年成人高考《語文》現代文閱讀理解技巧題庫
- 2025年地理學業水平考試模擬試卷-地圖與地球科學專項試題集
- 《新媒體運營》高職新媒體運營全套教學課件
- 混凝土面板堆石壩工程中溢洪道水力設計計算書
- 可穿戴式設備安全可靠性技術規范 頭戴式設備
- 《網絡營銷》-課件:33病毒營銷
- 廣東省深圳市深中共同體聯考2023-2024學年八年級下學期期中歷史試卷(解析版)
- 2024項目投資協議書
- 中考數學計算題練習100道(2024年中考真題)
- 我和我的祖國混聲四部合唱簡譜
- 家校溝通經驗分享-溝通有方法教育有溫度
- CJJ75-1997 城市道路綠化規劃與設計規范
- 醫學檢驗技術專業《臨床實驗室管理》課程標準
評論
0/150
提交評論