當前位置:首頁 » 密碼管理 » 3des加密ios

3des加密ios

發布時間: 2022-07-18 05:41:25

Ⅰ 思科IOS文件名稱不同,都表示什麼

思科IOS軟體命名規則簡單介紹:
AAAAA-BBBB-CC-DDDD.EE

AAAAA部分:
硬體平台字元組 也就是思科路由器、交換機的型號

BBBB部分:
表示特性的字元串
代碼 特性集
a APPN特性集
b 支持AppleTalk協議
c 遠程訪問服務子集
d Desktop特性集
f FRAD子集
g ISDN特性集
i 支持IP特性集
j 企業特性集
k8 支持低於或等於64位加密(DES),12.2或者更高版本
k9 高於64位的強加密(3DES、AES),12.2或者更高版本
n 支持IPX特性集
o 支持防火牆特性集
o3 有指令檢測的Firewall
q 非同步
p 支持運營商特性集
r 支持IBM特性集
s 支持11.2或更高版本的PLUS特性集
s3 c2600/c3600基本的plus特性集
v VIP和雙RSP支持
x 支持X.25、FR和H.323協議
y 簡化的IP特性集
y7 IP和ADSL,只支持c1700系列路由器
z 可管理MODEM
56 支持56位加密
56i 支持56位加密,同時支持IPSEC 12.1或者更高版本的,還包括SSH協議

CC部分:
格式字元組
第一個「C」指出映像的在哪個路由器內存類型中執行
f flash
m RAM
r ROM
l 運行時刻定位

第二個「C」說明如何進行壓縮
z zip壓縮
x mzip壓縮
w stac壓縮

DDDD部分:
版本說明字元組 指出IOS軟體的版本號

EE部分:
文件名後綴 比如.bin或者.tar

Ⅱ ios 3des加密 32位key怎麼使用

除非特殊需求,現在加密關鍵數據基本都用AES了,AES相對3DES更安全,更高效。

Ⅲ ios支付寶怎麼把私鑰轉換成pkcs8 格式

用途:
pkcs8格式的私鑰轉換工具。它處理在PKCS#8格式中的私鑰文件。它可以用多樣的PKCS#5 (v1.5 and v2.0)和 PKCS#12演算法來處理沒有解密的PKCS#8 PrivateKeyInfo格式和EncryptedPrivateKeyInfo格式。
用法:
[cpp] view plain
openssl pkcs8 [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename]
[-passout arg] [-topk8] [-noiter] [-nocrypt] [-nooct] [-embed] [-nsdb] [-v2 alg] [-v1 alg] [-engine id]
選項說明:
-inform PEM|DER::輸入文件格式,DER或者PEM格式。DER格式採用ASN1的DER標准格式。一般用的多的都是PEM格式,就是base64編碼格式。
-outform DER|PEM:輸出文件格式,DER或者PEM格式。
-in filename:輸入的密鑰文件,默認為標准輸入。如果密鑰被加密,會提示輸入一個密鑰口令。
-passin arg:輸入文件口令保護來源。
-out filename:輸出文件,默認為標准輸出。如果任何加密操作已經執行,會提示輸入一個密鑰值。輸出的文件名字不能和輸入的文件名一樣。
-passout arg:輸出文件口令保護來源。
-topk8:通常的是輸入一個pkcs8文件和傳統的格式私鑰文件將會被寫出。設置了此選項後,位置轉換過來:輸入一個傳統格式的私鑰文件,輸出一個PKCS#8格式的文件。
-noiter:MAC保護計算次數為1。
-nocrypt:PKCS#8密鑰產生或輸入一般用一個適當地密鑰來加密PKCS#8 EncryptedPrivateKeyInfo結構。設置了此選項後,一個不加密的PrivateKeyInfo結構將會被輸出。這個選項一直不加密私鑰文件,在絕對必要的時候才能夠使用。某些軟體例如一些java代碼簽名軟體使用不加密的私鑰文件。
-nooct:這個選項產生的RSA私鑰文件是一個壞的格式,一些軟體將會使用。特別的是,私鑰文件必須附上一個八位組字元串,但是一些軟體僅僅包含本身的結構體沒有使八位組字元串所環繞。不採用八位組表示私鑰。
-embed:這個選項產生的RSA私鑰文件是一個壞的格式。在私鑰結構體中採用嵌入式DSA參數格式。在這個表單中,八位組字元串包含了ASN1 SEQUENCE中的兩種結構:一個SEQUENCE包含了密鑰參數,一個ASN1 INTEGER包含私鑰值。
-nsdb:這個選項產生的RSA私鑰文件是一個壞的格式並兼容了Netscape私鑰文件資料庫。採用NetscapeDB的DSA格式。
-v2 alg:採用PKCS#5 v2.0,並指定加密演算法,默認的是PKCS#8私鑰文件被叫做B<pbeWithMD5AndDES-CBC>(該演算法用56位元組的DES加密但是在PKCS#5 v1.5中有更加強壯的加密演算法)的加密演算法用口令進行加密。用B<-v2>選項,PKCS#5 v2.0相關的演算法將會被使用,可以是des3(168位元組)和rc2(128位元組),推薦des3。
-v1 alg:採用PKCS#5 v1.5或pkcs12,並指定加密演算法。可採用的演算法見下面。
-engine id:指定硬體引擎。
注意:
加密了的PEM編碼PKCS#8文件表單用下面的頭部和尾部:
-----BEGIN ENCRYPTED PRIVATE KEY-----
-----END ENCRYPTED PRIVATE KEY-----
未加密的表單用:
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
跟傳統的SSLeay演算法相比,用PKCS#5 v2.0系列的演算法加密私鑰,有更高的安全性以及迭代次數。於是附加的安全性是經過深思熟慮的。
默認的加密演算法僅僅是56位元組的,是因為它是PKCS#8所支持的最好的方法。
有一些軟體使用PKCS#12基於密鑰的加密演算法來加密PKCS#8格式的私鑰:它們會自動的處理但是沒有選項來操作。
在PKCS#8格式中,有可能的是輸出DER編碼格式的經過加密的私鑰文件,是因為加密的詳細說明包含在DER等級中,相反的是傳統的格式包含在PEM鄧麗中。
PKCS#5 v1.5和 PKCS#12 演算法:
各種各樣的演算法可以被選項-v1所使用。包含PKCS#5 v1.5和 PKCS#12 演算法。詳細描述如下:
B<PBE-MD2-DES PBE-MD5-DES>:這兩個演算法包含在PKCS#5 v1.5中。它們僅僅提供56位元組的保護,加密演算法用DES。
B<PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES>:它們在傳統的PKCS#5 v1.5中沒有被提到,但是它們用同樣地密鑰引出演算法,被一些軟體所支持。在PKCS#5 v2.0中所提到。它們使用64位元組的RC2以及56位元組的DES。
B<PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40>:它們是PKCS#12基於密鑰的加密演算法,它們允許使用高強度的加密演算法,例如3des或128位的RC2。
實例:
用3des演算法將傳統的私鑰文件轉換為PKCS#5 v2.0:
[cpp] view plain
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem

用PKCS#5 1.5兼容的DES演算法將私鑰文件轉換為pkcs8文件:
[html] view plain
openssl pkcs8 -in ocspserverkey.pem -topk8 -out ocspkcs8key.pem

用PKCS#12兼容的3DES演算法將私鑰文件轉換為pkcs8文件:
[html] view plain
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES

讀取一個DER格式加密了的PKCS#8格式的私鑰:
[cpp] view plain
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem

轉換一個PKCS#8格式的私鑰到傳統的私鑰:
[cpp] view plain
openssl pkcs8 -in pk8.pem -out key.pem

pkcs8中的私鑰以明文存放:
[html] view plain
openssl pkcs8 -in ocspserverkey.pem -topk8 -nocrypt -out ocspkcs8key.pem

標准:
PKCS#5 v2.0的測試向量的實現是以通告的形式用高強度的迭代次數演算法3DES、DES和RC2來加密的。很多人要確認能夠解密產生的私鑰。
PKCS#8格式的DSA私鑰文件沒有備注文件中的:在PKCS#11 v2.01中的11.9節被隱藏了的。OpenSSL的默認DSA PKCS#8私鑰格式隱藏在這個標准中。
BUGs:
必須有一個選項列印使用的加密演算法的其他詳細細節,例如迭代次數。
PKCS#8用3DES和PKCS#5 v2.0必須是默認的私鑰文件:目前為了命令的兼容性。

Ⅳ 酷信即時通訊軟體有什麼特點

  1. 實時動態碼流技術:軟體會根據客戶端的帶寬和CPU性能,實 時調整每個端的上傳碼流和下載碼流,從 而極大降低了畫面卡頓,基本消除了馬賽 克,極其流暢

  2. 並發數高伺服器轉發的模式下(帶寬100M),語音會 議的單台最大並發數為1600個,視頻會議 的單台最大並發數為400個;在P2P模式 下,一台伺服器支持上萬用戶;開啟集群 伺服器後,並發用戶數可達上億。單個會 議支持32方視頻通話支持500方語音通話

  3. 通話錄制在視頻聊天過程中,支持在客戶端實時錄 像,把屏幕的一切內容錄像成文件,並保 存到相冊或文件夾

  4. 高清音畫質,兼容WebRTC系統可以通過一個URL進行視頻聊天,采 用H264或VP8編解碼,完全兼容WebRTC 、VOIP等技術,並支持關閉APP或鎖定手 機屏幕時仍可實時喚醒進行通話(iOS中叫 CallKit),並在結束通話後形成手機通話記 錄。

  5. 消息加密演算法:支持3DES 加密、AES加密、RSA加密 三種方式,包括群聊,也 支持非對稱演算法加密,徹 底防止伺服器監控數據, 保證隱私

  6. 在登陸這一方面,支持用 RSA演算法進行身份鑒定,使 用用戶密碼獲取登錄Key、 介面Key、消息Key、支付 Key自動登陸使用登錄Key 登錄,介面的參數用介面 Key驗簽;並且每次登陸或 自動登陸後,重新生成登 錄Key和介面Key,以防偽 造身份登錄

  7. 在線客服系統功能等等等

Ⅳ 這個是什麼加密方式

幾種加密方式
1 Base64加密方式(可逆)
Base64中的可列印字元包括字母A-Z/a-z/數組0-9/ 加號』+』斜杠』/』 這樣共有62個字元
Base64 ios7之後加入系統庫

2 MD5加密
Message Digest Algorithm MD5(中文名為消息摘要演算法第五版)為計算機安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護
是計算機廣泛使用的雜湊演算法之一(又譯摘要演算法、哈希演算法),主流編程語言普遍已有MD5實現。
根據輸出值,不能得到原始的明文,即其過程不可逆
MD5演算法具有以下特點:
1、壓縮性:任意長度的數據,算出的MD5值長度都是固定的。
2、容易計算:從原數據計算出MD5值很容易。
3、抗修改性:對原數據進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別。
4、強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(即偽造數據)是非常困難的。

MD5的作用是讓大容量信息在用數字簽名軟體簽署私人密鑰前被」壓縮"成一種保密的格式(就是把一個任意長度的位元組串變換成一定長的十六進制數字串)。除了MD5以外,其中比較有名的還有sha-1、RIPEMD以及Haval等。
MD5加鹽

3 鑰匙串加密方式

iCloud鑰匙串,蘋果給我們提供的密碼保存的解決方案,iOS7之後有的

存沙盒:
1、如果手機越獄,密碼容易被竊取。
2、當軟體更新時,沙盒裡的內容是不被刪除的。但是,如果將軟體卸載後重裝,沙盒裡的數據就沒有了。
3、每個APP的沙盒是相對獨立的,密碼無法共用。

存鑰匙串里:
1、蘋果提供的安全方案,rsa加密,相對安全。
2、無論軟體更新或刪除,密碼都存在,都可以自動登錄。
3、同一公司的APP密碼是可以共用的。
4 對稱加密演算法

優點:演算法公開、計算量小、加密速度快、加密效率高、可逆
缺點:雙方使用相同鑰匙,安全性得不到保證
現狀:對稱加密的速度比公鑰加密快很多,在很多場合都需要對稱加密,
演算法: 在對稱加密演算法中常用的演算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES等。不同演算法的實現機制不同,可參考對應演算法的詳細資料
相較於DES和3DES演算法而言,AES演算法有著更高的速度和資源使用效率,安全級別也較之更高了,被稱為下一代加密標准

Ⅵ 跪求 DES跨(C# Android IOS)三個平台通用的加解密方法


#region跨平台加解密(c#安卓IOS)

//publicstaticstringsKey="12345678";

/////<summary>

/////解密

/////</summary>

/////<paramname="pToDecrypt">要解密的以Base64</param>

/////<paramname="sKey">密鑰,且必須為8位</param>

/////<returns>已解密的字元串</returns>

//publicstaticstringDesDecrypt(stringpToDecrypt)

//{

////轉義特殊字元

//pToDecrypt=pToDecrypt.Replace("-","+");

//pToDecrypt=pToDecrypt.Replace("_","/");

//pToDecrypt=pToDecrypt.Replace("~","=");

//byte[]inputByteArray=Convert.FromBase64String(pToDecrypt);

//using(DESCryptoServiceProviderdes=newDESCryptoServiceProvider())

//{

//des.Key=ASCIIEncoding.ASCII.GetBytes(sKey);

//des.IV=ASCIIEncoding.ASCII.GetBytes(sKey);

//System.IO.MemoryStreamms=newSystem.IO.MemoryStream();

//using(CryptoStreamcs=newCryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write))

//{

//cs.Write(inputByteArray,0,inputByteArray.Length);

//cs.FlushFinalBlock();

//cs.Close();

//}

//stringstr=Encoding.UTF8.GetString(ms.ToArray());

//ms.Close();

//returnstr;

//}

//}

/////<summary>

/////對字元串進行DES加密

/////</summary>

/////<paramname="sourceString">待加密的字元串</param>

/////<returns>加密後的BASE64編碼的字元串</returns>

//publicstringEncrypt(stringsourceString)

//{

//byte[]btKey=Encoding.UTF8.GetBytes(sKey);

//byte[]btIV=Encoding.UTF8.GetBytes(sKey);

//DESCryptoServiceProviderdes=newDESCryptoServiceProvider();

//using(MemoryStreamms=newMemoryStream())

//{

//byte[]inData=Encoding.UTF8.GetBytes(sourceString);

//try

//{

//using(CryptoStreamcs=newCryptoStream(ms,des.CreateEncryptor(btKey,btIV),CryptoStreamMode.Write))

//{

//cs.Write(inData,0,inData.Length);

//cs.FlushFinalBlock();

//}

//returnConvert.ToBase64String(ms.ToArray());

//}

//catch

//{

//throw;

//}

//}

//}

#endregion

安卓---------------------------------------------------------------------------

////加密

//(Stringmessage,Stringkey)

//throwsException{

//byte[]bytesrc=Base64.decode(message.getBytes(),Base64.DEFAULT);

//Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");

//DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes("UTF-8"));

//SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");

//SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);

//IvParameterSpeciv=newIvParameterSpec(key.getBytes("UTF-8"));

//cipher.init(Cipher.DECRYPT_MODE,secretKey,iv);

//byte[]retByte=cipher.doFinal(bytesrc);

//returnnewString(retByte);

//}

////解密

//(Stringmessage,Stringkey)

//throwsException{

//Ciphercipher=Cipher.getInstance("DES/CBC/PKCS5Padding");

//DESKeySpecdesKeySpec=newDESKeySpec(key.getBytes("UTF-8"));

//SecretKeyFactorykeyFactory=SecretKeyFactory.getInstance("DES");

//SecretKeysecretKey=keyFactory.generateSecret(desKeySpec);

//IvParameterSpeciv=newIvParameterSpec(key.getBytes("UTF-8"));

//cipher.init(Cipher.ENCRYPT_MODE,secretKey,iv);

//byte[]encryptbyte=cipher.doFinal(message.getBytes());

//returnnewString(Base64.encode(encryptbyte,Base64.DEFAULT));

//}

Ios--------------------------------------------------------------------------------------------------------------------

staticconstchar*encryptWithKeyAndType(constchar*text,CCOperationencryptOperation,char*key)
{
NSString*textString=[[NSStringalloc]initWithCString:textencoding:NSUTF8StringEncoding];
//NSLog(@"[[item.urldescription]UTF8String=%@",textString);
constvoid*dataIn;
size_tdataInLength;

if(encryptOperation==kCCDecrypt)//傳遞過來的是decrypt解碼
{
//解碼base64
NSData*decryptData=[GTMBase64decodeData:[textStringdataUsingEncoding:NSUTF8StringEncoding]];//轉成utf-8並decode
dataInLength=[decryptDatalength];
dataIn=[decryptDatabytes];
}
else//encrypt
{
NSData*encryptData=[textStringdataUsingEncoding:NSUTF8StringEncoding];
dataInLength=[encryptDatalength];
dataIn=(constvoid*)[encryptDatabytes];
}


CCCryptorStatusccStatus;
uint8_t*dataOut=NULL;//可以理解位type/typedef的縮寫(有效的維護了代碼,比如:一個人用int,一個人用long。最好用typedef來定義)
size_tdataOutAvailable=0;//size_t是操作符sizeof返回的結果類型
size_tdataOutMoved=0;

dataOutAvailable=(dataInLength+kCCBlockSizeDES)&~(kCCBlockSizeDES-1);
dataOut=malloc(dataOutAvailable*sizeof(uint8_t));
memset((void*)dataOut,00,dataOutAvailable);//將已開辟內存空間buffer的首1個位元組的值設為值0

//NSString*initIv=@"12345678";
constvoid*vkey=key;
constvoid*iv=(constvoid*)key;//[initIvUTF8String];

//CCCrypt函數加密/解密
ccStatus=CCCrypt(encryptOperation,//加密/解密
kCCAlgorithmDES,//加密根據哪個標准(des,3des,aes。。。。)
kCCOptionPKCS7Padding,//選項分組密碼演算法(des:對每塊分組加一次密3DES:對每塊分組加三個不同的密)
vkey,//密鑰加密和解密的密鑰必須一致
kCCKeySizeDES,//DES密鑰的大小(kCCKeySizeDES=8)
iv,//可選的初始矢量
dataIn,//數據的存儲單元
dataInLength,//數據的大小
(void*)dataOut,//用於返回數據
dataOutAvailable,
&dataOutMoved);

NSString*result=nil;

if(encryptOperation==kCCDecrypt)//encryptOperation==1解碼
{
//得到解密出來的data數據,改變為utf-8的字元串
result=[[NSStringalloc]initWithData:[NSDatadataWithBytes:(constvoid*)dataOutlength:(NSUInteger)dataOutMoved]encoding:NSUTF8StringEncoding];
}
else//encryptOperation==0(加密過程中,把加好密的數據轉成base64的)
{
//編碼base64
NSData*data=[NSDatadataWithBytes:(constvoid*)dataOutlength:(NSUInteger)dataOutMoved];
result=[GTMBase64stringByEncodingData:data];
}

return[resultUTF8String];

}
+(NSString*)encryptWithContent:(NSString*)contenttype:(CCOperation)typekey:(NSString*)aKey
{
constchar*contentChar=[contentUTF8String];
char*keyChar=(char*)[aKeyUTF8String];
constchar*miChar;
miChar=encryptWithKeyAndType(contentChar,type,keyChar);
return[NSStringstringWithCString:miCharencoding:NSUTF8StringEncoding];
}

Ⅶ cisco asa5520的密碼用什麼方式加密的,是MD5還是3DES啊

好像是MD5吧

Ⅷ ios des加密 用的什麼形式

最常用的是MD5和base64編碼,還有DES 3DES AES加密
u

Ⅸ 思科路由器的K9是什麼意思

  1. 這個是路由器的加密功能,K9為高於64位的強加密(3DES、AES),12.2或更高版本;

  2. 在cisco ios命名規則中,K是具有加密功能的IOS,一般有K8,K9不同的版本;

  3. 在不同的路由器中可以根據不同的功能需要安裝不同的IOS,特別是在企業環境下路由器當防火牆及IDS等都需要加密功能,因此帶K字的IOS版本都可以實現一定的安全功能。

php加密文件 解密data 轉nsstring 為nil. rc4 ios

IOS:引入ios自帶庫 #include

先以DES加密演算法為例講解,DES的加密和解密都同用一個Key,下面兩個加解密函數如下:
//加密
-(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key
{
//一般對加密的字元串採用UTF-8編碼 NSData存儲的就是二進制數據
NSData *data = [clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
//See the doc: For block ciphers, the output size will always be less than or
//equal to the input size plus the size of one block.
//確定加密過後的字元串在內存中存放的大小,根據文檔,對於塊密碼方式(這個庫還包括流密碼方式)
//加密過後的字元串大小總是小於或等於加密之前數據的大小加上對應加密演算法的塊大小
//但看到一些大牛還這樣一下 & ~(kCCBlockSizeDES - 1) 目前不知道為嘛
size_t bufferSize = ([data length] + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
//void *buffer = malloc(bufferSize);//可以手動創建buffer,但之後要記得free掉
unsigned char buffer[bufferSize]; //定義輸出加密串所佔內存空間
memset(buffer, 0, sizeof(char)); //採用ios中宏定義好的方法分配空間,可免去手動free
size_t numBytesEncrypted = 0; //輸出加密串的位元組數

//加密數據,採用庫中的CCCrypt方法,這個方法會按次序執行CCCrytorCreate(),
// CCCryptorUpdate(), CCCryptorFinal(), and CCCryptorRelease() 如果開發者自己create這個對象,
//那麼後面就必須執行final、release之類的函數,CCCrypt方法一次性解決

// Byte iv[] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
//Byte iv[] = {1,2,3,4,5,6,7,8}; 加密所需的隨機字元
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, //加密方式,kCCEncrypt加密 kCCDecrypt解密
kCCAlgorithmDES, //採用的加密演算法,內置包含AES、DES、
//3DES、其他還有四個,不知道是什麼
//後續討論
//加密額外參數,注意此處各個平台之間指定的時候要記得一樣
kCCOptionPKCS7Padding | kCCOptionECBMode,
[key UTF8String], //加密密匙 UTF8的字元串
kCCKeySizeDES, //密匙長度位元組 各演算法有對應的長度宏
nil, //隨機字元,可指定也可不指定,各平台之間不絕對
[data bytes], //待加密串的位元組長度
[data length], //待加密串的長度
buffer, //輸出已加密串的內存地址
bufferSize, //已加密串的大小
&numBytesEncrypted);

NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData *dataTemp = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
plainText = [GTMBase64 stringByEncodingData:dataTemp];
}else{
NSLog(@"DES加密失敗");
}
return plainText;
}

//解密
-(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key {
// 利用 GTMBase64 解碼 Base64 字串
NSData* cipherData = [GTMBase64 decodeString:cipherText];
size_t bufferSize = ([cipherData length] + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
//unsigned char buffer[1024];
unsigned char buffer[bufferSize];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;

// IV 偏移量不需使用
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
nil,
[cipherData bytes],
[cipherData length],
buffer,
bufferSize,//1024,
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
}
return plainText;
}

java和php平台的代碼實現:

Java代碼 收藏代碼
import java.io.IOException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class DES {

private byte[] desKey;

public DES(String desKey) {
this.desKey = desKey.getBytes();
}

public byte[] desEncrypt(byte[] plainText) throws Exception {
SecureRandom sr = new SecureRandom();
byte rawKeyData[] = desKey;
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, key, sr);
byte data[] = plainText;
byte encryptedData[] = cipher.doFinal(data);
return encryptedData;
}

public byte[] desDecrypt(byte[] encryptText) throws Exception {
SecureRandom sr = new SecureRandom();
byte rawKeyData[] = desKey;
DESKeySpec dks = new DESKeySpec(rawKeyData);
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey key = keyFactory.generateSecret(dks);
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, key, sr);
byte encryptedData[] = encryptText;
byte decryptedData[] = cipher.doFinal(encryptedData);
return decryptedData;
}

public String encrypt(String input) throws Exception {
return base64Encode(desEncrypt(input.getBytes()));
}

public String decrypt(String input) throws Exception {
byte[] result = base64Decode(input);
return new String(desDecrypt(result));
}

public static String base64Encode(byte[] s) {
if (s == null)
return null;
BASE64Encoder b = new sun.misc.BASE64Encoder();
return b.encode(s);
}

public static byte[] base64Decode(String s) throws IOException {
if (s == null)
return null;
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = decoder.decodeBuffer(s);
return b;
}

public static void main(String[] args) throws Exception {
String key = "abcdefgh";
String input = "a";
DES crypt = new DES(key);
System.out.println("Encode:" + crypt.encrypt(input));
System.out.println("Decode:" + crypt.decrypt(crypt.encrypt(input)));
}
}

php 方法一
Php代碼 收藏代碼
<?php
class DES1 {
var $key;
function DES1($key) {
$this->key = $key;
}
function encrypt($input) {
$size = mcrypt_get_block_size('des', 'ecb');
$input = $this->pkcs5_pad($input, $size);
$key = $this->key;
$td = mcrypt_mole_open('des', '', 'ecb', '');
$iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_mole_close($td);
$data = base64_encode($data);
return $data;
}
function decrypt($encrypted) {
$encrypted = base64_decode($encrypted);
$key =$this->key;
$td = mcrypt_mole_open('des','','ecb','');
//使用MCRYPT_DES演算法,cbc模式
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
@mcrypt_generic_init($td, $key, $iv);
//初始處理
$decrypted = mdecrypt_generic($td, $encrypted);
//解密
mcrypt_generic_deinit($td);
//結束
mcrypt_mole_close($td);
$y=$this->pkcs5_unpad($decrypted);
return $y;
}
function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text) {
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text))
return false;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad)
return false;
return substr($text, 0, -1 * $pad);
}
}
$key = "abcdefgh";
$input = "a";
$crypt = new DES1($key);
echo "Encode:".$crypt->encrypt($input)."<br/>";
echo "Decode:".$crypt->decrypt($crypt->encr

熱點內容
安卓孤膽車神被封號怎麼解封 發布:2025-05-11 04:05:22 瀏覽:940
高壓洗車泡沫怎麼配置 發布:2025-05-11 04:00:47 瀏覽:547
騰訊輕量伺服器怎麼使用 發布:2025-05-11 03:52:46 瀏覽:174
4位密碼組合有多少種至少有一個0 發布:2025-05-11 03:44:03 瀏覽:338
八卦手指演算法 發布:2025-05-11 03:23:32 瀏覽:281
編譯成exe是什麼意思 發布:2025-05-11 03:23:28 瀏覽:470
javaweb技術內幕 發布:2025-05-11 03:20:14 瀏覽:803
多台焊機變壓器怎麼配置 發布:2025-05-11 03:18:07 瀏覽:310
nmake編譯 發布:2025-05-11 03:04:32 瀏覽:622
房產證加密碼 發布:2025-05-11 02:49:17 瀏覽:341