您好,欢迎访问一九零五行业门户网

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

java、php、c#、object-c 通用的des加密解密
java、android:
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 pkcs5unpad($str); return $str; } function hex2bin($hexdata) { $bindata = ; for ($i = 0; $i 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; } } }
?
object-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 mr.liao on 2016-01-22.// copyright (c) 2016年 nomanland. 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) & 0x0f) ]; encodingbytes[encodingbaseindex+2] = encodingtable[((rawbyte2 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) & 0x0f) ]; encodingbytes[encodingbaseindex+2] = encodingtable[((rawbyte2 > 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] 4); decodedbytes[k+1] = (decodingblock[1] 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] 4); decodedbytes[k+1] = (decodingblock[1] 2); k += 2; } else if( j == 2 ) { decodedbytes[k] = (decodingblock[0] 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
?
?
?
?
其它类似信息

推荐信息