PHP、JAVA、C#、Objective-C 通用的DES加密

PHP:

class?JoDES?{

private?static?$_instance?=?NULL;

/**

*?@return?JoDES

*/

public?static?function?share()?{

if?(is_null(self::$_instance))?{

self::$_instance?=?new?JoDES();

}

return?self::$_instance;

}

/**

*?加密

*?@param?string?$str?要處理的字符串

*?@param?string?$key?加密Key,為8個字節長度

*?@return?string

*/

public?function?encode($str,?$key)?{

$size?=?mcrypt_get_block_size(MCRYPT_DES,?MCRYPT_MODE_CBC);

$str?=?$this->pkcs5Pad($str,?$size);

$aaa?=?mcrypt_cbc(MCRYPT_DES,?$key,?$str,?MCRYPT_ENCRYPT,?$key);

$ret?=?base64_encode($aaa);

return?$ret;

}

/**

*?解密

*?@param?string?$str?要處理的字符串

*?@param?string?$key?解密Key,為8個字節長度

*?@return?string

*/

public?function?decode($str,?$key)?{

$strBin?=?base64_decode($str);

$str?=?mcrypt_cbc(MCRYPT_DES,?$key,?$strBin,?MCRYPT_DECRYPT,?$key);

$str?=?$this->pkcs5Unpad($str);

return?$str;

}

function?hex2bin($hexData)?{

$binData?=?"";

for?($i?=?0;?$i?<?strlen($hexData);?$i?+=?2)?{

$binData?.=?chr(hexdec(substr($hexData,?$i,?2)));

}

return?$binData;

}

function?pkcs5Pad($text,?$blocksize)?{

$pad?=?$blocksize?-?(strlen($text)?%?$blocksize);

return?$text?.?str_repeat(chr($pad),?$pad);

}

function?pkcs5Unpad($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);

}

}

C#

public?class?MyDes

{

///

///?DES加密方法

///

///明文

///密鑰

///向量

///密文

public?static?string?Encode(string?source,?string?_DESKey)

{

StringBuilder?sb?=?new?StringBuilder();

using?(DESCryptoServiceProvider?des?=?new?DESCryptoServiceProvider())

{

byte[]?key?=?ASCIIEncoding.ASCII.GetBytes(_DESKey);

byte[]?iv?=?ASCIIEncoding.ASCII.GetBytes(_DESKey);

byte[]?dataByteArray?=?Encoding.UTF8.GetBytes(source);

des.Mode?=?System.Security.Cryptography.CipherMode.CBC;

des.Key?=?key;

des.IV?=?iv;

string?encrypt?=?"";

using?(MemoryStream?ms?=?new?MemoryStream())

using?(CryptoStream?cs?=?new?CryptoStream(ms,?des.CreateEncryptor(),?CryptoStreamMode.Write))

{

cs.Write(dataByteArray,?0,?dataByteArray.Length);

cs.FlushFinalBlock();

encrypt?=?Convert.ToBase64String(ms.ToArray());

}

return?encrypt;

}

}

///

///?進行DES解密。

///

///要解密的base64串

///密鑰,且必須為8位。

///已解密的字符串。

public?static?string?Decode(string?source,?string?sKey)

{

byte[]?inputByteArray?=?System.Convert.FromBase64String(source);//Encoding.UTF8.GetBytes(source);

using?(DESCryptoServiceProvider?des?=?new?DESCryptoServiceProvider())

{

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

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

System.IO.MemoryStream?ms?=?new?System.IO.MemoryStream();

using?(CryptoStream?cs?=?new?CryptoStream(ms,?des.CreateDecryptor(),?CryptoStreamMode.Write))

{

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

cs.FlushFinalBlock();

cs.Close();

}

string?str?=?Encoding.UTF8.GetString(ms.ToArray());

ms.Close();

return?str;

}

}

}

Objective-C

/***??JoDes.h?***/

#import

#import

#import

@interface?JoDes?:?NSObject

+?(NSString?*)?encode:(NSString?*)str?key:(NSString?*)key;

+?(NSString?*)?decode:(NSString?*)str?key:(NSString?*)key;

@end

/***??JoDes.m?***/

//

//??XLEncrytHelper.m

//??NewHoldGold

//

//??Created?by?梁鑫磊?on?13-12-27.

//??Copyright?(c)?2013年?zsgjs.?All?rights?reserved.

//

#import?"JoDes.h"

@interface?JoDes()

+?(NSString?*)?encodeBase64WithString:(NSString?*)strData;

+?(NSString?*)?encodeBase64WithData:(NSData?*)objData;

+?(NSData?*)?decodeBase64WithString:(NSString?*)strBase64;

+?(NSString?*)doCipher:(NSString?*)sTextIn?key:(NSString?*)sKey

context:(CCOperation)encryptOrDecrypt;

@end

@implementation?JoDes

+?(NSString?*)?encode:(NSString?*)str?key:(NSString?*)key

{

//?doCipher?不能編漢字,所以要進行?url?encode

NSMutableString*?str1?=?[JoDes?urlEncode:str];

NSMutableString*?encode?=?[NSMutableString?stringWithString:[JoDes?doCipher:str1?key:key?context:kCCEncrypt]];

[JoDes?formatSpecialCharacters:encode];

return?encode;

}

+?(NSString?*)?decode:(NSString?*)str?key:(NSString?*)key

{

NSMutableString?*str1?=?[NSMutableString?stringWithString:str];

[JoDes?reformatSpecialCharacters:str1];

NSString?*rt?=?[JoDes?doCipher:str1?key:key?context:kCCDecrypt];

return?rt;

}

+?(NSMutableString?*)urlEncode:(NSString*)str

{

NSMutableString*?encodeStr?=?[NSMutableString?stringWithString:[str?stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

[encodeStr?replaceOccurrencesOfString:@"+"?withString:@"%2B"?options:NSWidthInsensitiveSearch?range:NSMakeRange(0,?[encodeStr?length])];

[encodeStr?replaceOccurrencesOfString:@"/"?withString:@"%2F"?options:NSWidthInsensitiveSearch?range:NSMakeRange(0,?[encodeStr?length])];

return?encodeStr;

}

+?(void)formatSpecialCharacters:(NSMutableString?*)str

{

[str?replaceOccurrencesOfString:@"+"?withString:@"$$"?options:NSWidthInsensitiveSearch?range:NSMakeRange(0,?[str?length])];

[str?replaceOccurrencesOfString:@"/"?withString:@"@@"?options:NSWidthInsensitiveSearch?range:NSMakeRange(0,?[str?length])];

}

+?(void)reformatSpecialCharacters:(NSMutableString?*)str

{

[str?replaceOccurrencesOfString:@"$$"?withString:@"+"?options:NSWidthInsensitiveSearch?range:NSMakeRange(0,?[str?length])];

[str?replaceOccurrencesOfString:@"@@"?withString:@"/"?options:NSWidthInsensitiveSearch?range:NSMakeRange(0,?[str?length])];

}

+?(NSString?*)encodeBase64WithString:(NSString?*)strData?{

return?[JoDes?encodeBase64WithData:[strData?dataUsingEncoding:NSUTF8StringEncoding]];

}

+?(NSString?*)encodeBase64WithData:(NSData?*)objData?{

NSString?*encoding?=?nil;

unsigned?char?*encodingBytes?=?NULL;

@try?{

static?char?encodingTable[64]?=?"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

static?NSUInteger?paddingTable[]?=?{0,2,1};

NSUInteger?dataLength?=?[objData?length];

NSUInteger?encodedBlocks?=?(dataLength?*?8)?/?24;

NSUInteger?padding?=?paddingTable[dataLength?%?3];

if(?padding?>?0?)?encodedBlocks++;

NSUInteger?encodedLength?=?encodedBlocks?*?4;

encodingBytes?=?malloc(encodedLength);

if(?encodingBytes?!=?NULL?)?{

NSUInteger?rawBytesToProcess?=?dataLength;

NSUInteger?rawBaseIndex?=?0;

NSUInteger?encodingBaseIndex?=?0;

unsigned?char?*rawBytes?=?(unsigned?char?*)[objData?bytes];

unsigned?char?rawByte1,?rawByte2,?rawByte3;

while(?rawBytesToProcess?>=?3?)?{

rawByte1?=?rawBytes[rawBaseIndex];

rawByte2?=?rawBytes[rawBaseIndex+1];

rawByte3?=?rawBytes[rawBaseIndex+2];

encodingBytes[encodingBaseIndex]?=?encodingTable[((rawByte1?>>?2)?&?0x3F)];

encodingBytes[encodingBaseIndex+1]?=?encodingTable[((rawByte1?<<?4)?&?0x30)?|?((rawByte2?>>?4)?&?0x0F)?];

encodingBytes[encodingBaseIndex+2]?=?encodingTable[((rawByte2?<<?2)?&?0x3C)?|?((rawByte3?>>?6)?&?0x03)?];

encodingBytes[encodingBaseIndex+3]?=?encodingTable[(rawByte3?&?0x3F)];

rawBaseIndex?+=?3;

encodingBaseIndex?+=?4;

rawBytesToProcess?-=?3;

}

rawByte2?=?0;

switch?(dataLength-rawBaseIndex)?{

case?2:

rawByte2?=?rawBytes[rawBaseIndex+1];

case?1:

rawByte1?=?rawBytes[rawBaseIndex];

encodingBytes[encodingBaseIndex]?=?encodingTable[((rawByte1?>>?2)?&?0x3F)];

encodingBytes[encodingBaseIndex+1]?=?encodingTable[((rawByte1?<<?4)?&?0x30)?|?((rawByte2?>>?4)?&?0x0F)?];

encodingBytes[encodingBaseIndex+2]?=?encodingTable[((rawByte2?<<?2)?&?0x3C)?];

//?we?can?skip?rawByte3?since?we?have?a?partial?block?it?would?always?be?0

break;

}

//?compute?location?from?where?to?begin?inserting?padding,?it?may?overwrite?some?bytes?from?the?partial?block?encoding

//?if?their?value?was?0?(cases?1-2).

encodingBaseIndex?=?encodedLength?-?padding;

while(?padding--?>?0?)?{

encodingBytes[encodingBaseIndex++]?=?'=';

}

encoding?=?[[NSString?alloc]?initWithBytes:encodingBytes?length:encodedLength?encoding:NSASCIIStringEncoding];

}

}

@catch?(NSException?*exception)?{

encoding?=?nil;

NSLog(@"WARNING:?error?occured?while?tring?to?encode?base?32?data:?%@",?exception);

}

@finally?{

if(?encodingBytes?!=?NULL?)?{

free(?encodingBytes?);

}

}

return?encoding;

}

+?(NSData?*)decodeBase64WithString:(NSString?*)strBase64?{

NSData?*data?=?nil;

unsigned?char?*decodedBytes?=?NULL;

@try?{

#define?__?255

static?char?decodingTable[256]?=?{

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0x00?-?0x0F

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0x10?-?0x1F

__,__,__,__,?__,__,__,__,?__,__,__,62,?__,__,__,63,??//?0x20?-?0x2F

52,53,54,55,?56,57,58,59,?60,61,__,__,?__,?0,__,__,??//?0x30?-?0x3F

__,?0,?1,?2,??3,?4,?5,?6,??7,?8,?9,10,?11,12,13,14,??//?0x40?-?0x4F

15,16,17,18,?19,20,21,22,?23,24,25,__,?__,__,__,__,??//?0x50?-?0x5F

__,26,27,28,?29,30,31,32,?33,34,35,36,?37,38,39,40,??//?0x60?-?0x6F

41,42,43,44,?45,46,47,48,?49,50,51,__,?__,__,__,__,??//?0x70?-?0x7F

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0x80?-?0x8F

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0x90?-?0x9F

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0xA0?-?0xAF

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0xB0?-?0xBF

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0xC0?-?0xCF

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0xD0?-?0xDF

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0xE0?-?0xEF

__,__,__,__,?__,__,__,__,?__,__,__,__,?__,__,__,__,??//?0xF0?-?0xFF

};

strBase64?=?[strBase64?stringByReplacingOccurrencesOfString:@"="?withString:@""];

NSData?*encodedData?=?[strBase64?dataUsingEncoding:NSASCIIStringEncoding];

unsigned?char?*encodedBytes?=?(unsigned?char?*)[encodedData?bytes];

NSUInteger?encodedLength?=?[encodedData?length];

NSUInteger?encodedBlocks?=?(encodedLength+3)?>>?2;

NSUInteger?expectedDataLength?=?encodedBlocks?*?3;

unsigned?char?decodingBlock[4];

decodedBytes?=?malloc(expectedDataLength);

if(?decodedBytes?!=?NULL?)?{

NSUInteger?i?=?0;

NSUInteger?j?=?0;

NSUInteger?k?=?0;

unsigned?char?c;

while(?i?<?encodedLength?)?{

c?=?decodingTable[encodedBytes[i]];

i++;

if(?c?!=?__?)?{

decodingBlock[j]?=?c;

j++;

if(?j?==?4?)?{

decodedBytes[k]?=?(decodingBlock[0]?<<?2)?|?(decodingBlock[1]?>>?4);

decodedBytes[k+1]?=?(decodingBlock[1]?<<?4)?|?(decodingBlock[2]?>>?2);

decodedBytes[k+2]?=?(decodingBlock[2]?<<?6)?|?(decodingBlock[3]);

j?=?0;

k?+=?3;

}

}

}

//?Process?left?over?bytes,?if?any

if(?j?==?3?)?{

decodedBytes[k]?=?(decodingBlock[0]?<<?2)?|?(decodingBlock[1]?>>?4);

decodedBytes[k+1]?=?(decodingBlock[1]?<<?4)?|?(decodingBlock[2]?>>?2);

k?+=?2;

}?else?if(?j?==?2?)?{

decodedBytes[k]?=?(decodingBlock[0]?<<?2)?|?(decodingBlock[1]?>>?4);

k?+=?1;

}

data?=?[[NSData?alloc]?initWithBytes:decodedBytes?length:k];

}

}

@catch?(NSException?*exception)?{

data?=?nil;

NSLog(@"WARNING:?error?occured?while?decoding?base?32?string:?%@",?exception);

}

@finally?{

if(?decodedBytes?!=?NULL?)?{

free(?decodedBytes?);

}

}

return?data;

}

+?(NSString?*)doCipher:(NSString?*)sTextIn?key:(NSString?*)sKey

context:(CCOperation)encryptOrDecrypt?{

NSStringEncoding?EnC?=?NSUTF8StringEncoding;

NSMutableData?*dTextIn;

if?(encryptOrDecrypt?==?kCCDecrypt)?{

dTextIn?=?[[JoDes?decodeBase64WithString:sTextIn]?mutableCopy];

}

else{

dTextIn?=?[[sTextIn?dataUsingEncoding:?EnC]?mutableCopy];

}

NSMutableData?*?dKey?=?[[sKey?dataUsingEncoding:EnC]?mutableCopy];

[dKey?setLength:kCCBlockSizeDES];

uint8_t?*bufferPtr1?=?NULL;

size_t?bufferPtrSize1?=?0;

size_t?movedBytes1?=?0;

//uint8_t?iv[kCCBlockSizeDES];

//memset((void?*)?iv,?0x0,?(size_t)?sizeof(iv));

//????Byte?iv[]?=?{0x12,?0x34,?0x56,?0x78,?0x90,?0xAB,?0xCD,?0xEF};

bufferPtrSize1?=?([sTextIn?length]?+?kCCKeySizeDES)?&?~(kCCKeySizeDES?-1);

bufferPtr1?=?malloc(bufferPtrSize1?*?sizeof(uint8_t));

memset((void?*)bufferPtr1,?0x00,?bufferPtrSize1);

CCCrypt(encryptOrDecrypt,?//?CCOperation?op

kCCAlgorithmDES,?//?CCAlgorithm?alg

kCCOptionPKCS7Padding,?//?CCOptions?options

[dKey?bytes],?//?const?void?*key

[dKey?length],?//?size_t?keyLength?//

[dKey?bytes],?//?const?void?*iv

[dTextIn?bytes],?//?const?void?*dataIn

[dTextIn?length],??//?size_t?dataInLength

(void?*)bufferPtr1,?//?void?*dataOut

bufferPtrSize1,?????//?size_t?dataOutAvailable

&movedBytes1);

//[dTextIn?release];

//[dKey?release];

NSString?*?sResult;

if?(encryptOrDecrypt?==?kCCDecrypt){

sResult?=?[[NSString?alloc]?initWithData:[NSData?dataWithBytes:bufferPtr1?length:movedBytes1]?encoding:EnC];

free(bufferPtr1);

}

else?{

NSData?*dResult?=?[NSData?dataWithBytes:bufferPtr1?length:movedBytes1];

free(bufferPtr1);

sResult?=?[JoDes?encodeBase64WithData:dResult];

}

return?sResult;

}

@end

JAVA

package?com.example.aric.test;

import?javax.crypto.Cipher;

import?javax.crypto.SecretKey;

import?javax.crypto.SecretKeyFactory;

import?javax.crypto.spec.DESKeySpec;

import?javax.crypto.spec.IvParameterSpec;

import?android.util.Base64;

public?class?DES?{

public?final?static?String?DES_KEY_STRING?=?"ABSujsuu";

public?static?String?encrypt(String?message,?String?key)?throws?Exception?{

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

DESKeySpec?desKeySpec?=?new?DESKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory?keyFactory?=?SecretKeyFactory.getInstance("DES");

SecretKey?secretKey?=?keyFactory.generateSecret(desKeySpec);

IvParameterSpec?iv?=?new?IvParameterSpec(key.getBytes("UTF-8"));

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

return?encodeBase64(cipher.doFinal(message.getBytes("UTF-8")));

}

public?static?String?decrypt(String?message,?String?key)?throws?Exception?{

byte[]?bytesrc?=?decodeBase64(message);//convertHexString(message);

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

DESKeySpec?desKeySpec?=?new?DESKeySpec(key.getBytes("UTF-8"));

SecretKeyFactory?keyFactory?=?SecretKeyFactory.getInstance("DES");

SecretKey?secretKey?=?keyFactory.generateSecret(desKeySpec);

IvParameterSpec?iv?=?new?IvParameterSpec(key.getBytes("UTF-8"));

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

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

return?new?String(retByte);

}

public?static?byte[]?convertHexString(String?ss)?{

byte?digest[]?=?new?byte[ss.length()?/?2];

for?(int?i?=?0;?i?<?digest.length;?i++)?{

String?byteString?=?ss.substring(2?*?i,?2?*?i?+?2);

int?byteValue?=?Integer.parseInt(byteString,?16);

digest[i]?=?(byte)?byteValue;

}

return?digest;

}

public?static?String?toHexString(byte?b[])?{

StringBuffer?hexString?=?new?StringBuffer();

for?(int?i?=?0;?i?<?b.length;?i++)?{

String?plainText?=?Integer.toHexString(0xff?&?b[i]);

if?(plainText.length()?<?2)

plainText?=?"0"?+?plainText;

hexString.append(plainText);

}

return?hexString.toString();

}

public?static?String?encodeBase64(byte[]?b)?{

return?Base64.encodeToString(b,?Base64.DEFAULT);

}

public?static?byte[]?decodeBase64(String?base64String)?{

return?Base64.decode(base64String,?Base64.DEFAULT);

}

}

引用:http://www.open-open.com/lib/view/open1452738808948.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,606評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,582評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,540評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,028評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,801評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,223評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,294評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,442評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,976評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,800評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,996評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,543評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,233評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,926評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,702評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • 引言 如今手機app五彩繽紛,確保手機用戶的數據安全是開發人員必須掌握的技巧,下面通過實例介紹DES在androi...
    freesan44閱讀 1,161評論 1 1
  • 概述 之前一直對加密相關的算法知之甚少,只知道類似DES、RSA等加密算法能對數據傳輸進行加密,且各種加密算法各有...
    Henryzhu閱讀 3,044評論 0 14
  • 一個半數學專業表達能力不強的理科女漢子,總是想看一些文學作品,或是寫一點不是記流水賬的東西,總是想不要把時間浪費,...
    肖肖喲閱讀 200評論 0 1
  • 一天一天寶貝的成長是我努力的部分動力,當然她的存在是我改變的全部,她讓我注意到了自己,看到了自己的問題,伴隨她的成...
    甜心教主閱讀 153評論 0 0
  • 那時還小,總是喜歡光著腳丫,手握一根木棍蹲在沙地里。先畫一座小房子,有一扇窗,有一扇門,門前再畫一條小河。要是心情...
    那飄落的粉筆灰閱讀 689評論 0 2