大发体育娱乐在线-大发体育娱乐官方网站-大发体育娱乐登录网址
做最好的网站

双向互通DES

来源:http://www.dfwstonefabricators.com 作者:编程应用 人气:74 发布时间:2019-09-19
摘要:因为项目的需求,最近几天一直在看关于加密的问题,将项目中使用到的DES加密整理一下,它可以使用适用于NET,Android,iOS三个平台. PHP: DES加密,DES有两种,一种是DES,对每组分组进

因为项目的需求,最近几天一直在看关于加密的问题,将项目中使用到的DES加密整理一下,它可以使用适用于NET,Android,iOS三个平台.

PHP:

DES加密,DES有两种,一种是DES,对每组分组进行一次加密,另一种是DES的升级版3DES,就是对每组分组进行3此加密,前者最大可使用8位的密匙,后者最大可使用24为密匙。

class JoDES {

看代码:

private static $_instance = NULL;

<pre><code class = 'cs hljs'>///////// 密匙//////public static string sKey = "12345678";

/**

////// 解密////// 要解密的以Base64/// 密钥,且必须为8位/// 已解密的字符串public static string DesDecrypt(string pToDecrypt){//转义特殊字符pToDecrypt = pToDecrypt.Replace;pToDecrypt = pToDecrypt.Replace;pToDecrypt = pToDecrypt.Replace;byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);using (DESCryptoServiceProvider des = new DESCryptoServiceProvider{des.Key = ASCIIEncoding.ASCII.GetBytes;des.IV = ASCIIEncoding.ASCII.GetBytes;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;}}

* @return JoDES

/// 对字符串进行DES加密////// 待加密的字符串/// 加密后的BASE64编码的字符串public string Encrypt(string sourceString){byte[] btKey = Encoding.UTF8.GetBytes;byte[] btIV = Encoding.UTF8.GetBytes;DESCryptoServiceProvider des = new DESCryptoServiceProvider();using (MemoryStream ms = new MemoryStream{byte[] inData = Encoding.UTF8.GetBytes(sourceString);try{using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write)){cs.Write(inData, 0, inData.Length);cs.FlushFinalBlock();}return Convert.ToBase64String(ms.ToArray;}catch{throw;}}}

*/

</code></pre>

public static function share() {

<pre><code class= 'hljs'>// 加密public static String DecryptDoNet(String message, String key)

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

 throws Exception {byte[] bytesrc = Base64.decode(message.getBytes(), Base64.DEFAULT);Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");DESKeySpec desKeySpec = new DESKeySpec(key.getBytes;SecretKeyFactory keyFactory = SecretKeyFactory.getInstance;

self::$_instance = new JoDES();

SecretKey secretKey = keyFactory.generateSecret(desKeySpec);

}

IvParameterSpec iv = new IvParameterSpec(key.getBytes;cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);byte[] retByte = cipher.doFinal;return new String;

return self::$_instance;

}

}

// 解密public static String EncryptAsDoNet(String message, String key) throws Exception {

/**

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

* 加密

DESKeySpec desKeySpec = new DESKeySpec(key.getBytes;SecretKeyFactory keyFactory = SecretKeyFactory.getInstance;SecretKey secretKey = keyFactory.generateSecret(desKeySpec);IvParameterSpec iv = new IvParameterSpec(key.getBytes;cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);byte[] encryptbyte = cipher.doFinal(message.getBytes;return new String(Base64.encode(encryptbyte, Base64.DEFAULT));

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

}</code></pre>

* @param string $key 加密Key,为8个字节长度

<pre><code class='Xcode'>

* @return string

/**

*/

  • DES加密解密(封装参数为NSString)
    • @param content 加解密内容
  • @param type 加/解密
  • @param aKey 密匙
    • @return 加/解密后的内容/+(NSString)encryptWithContent:(NSString)content type:(CCOperation)type key:(NSString)aKey{const char * contentChar =[content UTF8String];char * keyChar =[aKey UTF8String];const char *miChar;miChar = encryptWithKeyAndType(contentChar, type, keyChar);return [NSString stringWithCString:miChar encoding:NSUTF8StringEncoding];}

public function encode($str, $key) {

/**

$size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);

  • DES加密解密

    • @param text 需要加/解密的内容
  • @param encryptOperation 加/解密

  • @param key 密匙

    • @return 加/解密后的内容/static const char encryptWithKeyAndType(const char *text,CCOperation encryptOperation,char *key){NSString *textString=[[NSString alloc]initWithCString:text encoding:NSUTF8StringEncoding];const void *dataIn;//size_t dataInLength;if (encryptOperation == kCCDecrypt)//传递过来的是decrypt 解码{//解码 base64 // !!!!!!!!!!!!!!!!!-------->【解密进行了Base64字符串处理】,加密时使用,如要使用,去除Base64即可NSData decryptData = [GTMBase64 decodeData:[textString dataUsingEncoding:NSUTF8StringEncoding]];//转成utf-8并decodedataInLength = [decryptData length];dataIn = [decryptData bytes];}else //encrypt{NSData encryptData = [textString dataUsingEncoding:NSUTF8StringEncoding];dataInLength = [encryptData length];dataIn = (const void *)[encryptData bytes];}

    CCCryptorStatus ccStatus;uint8_t *dataOut = NULL; //可以理解位type/typedef 的缩写(有效的维护了代码,比如:一个人用int,一个人用long。最好用typedef来定义)size_t dataOutAvailable = 0; //size_t 是操作符sizeof返回的结果类型size_t dataOutMoved = 0;

    dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);dataOut = malloc( dataOutAvailable * sizeof;memsetdataOut, 00, dataOutAvailable);//将已开辟内存空间buffer的首 1 个字节的值设为值 0const void *vkey = key;const void *iv = (const void *) key; //[initIv UTF8String];

    //CCCrypt函数 加密/解密ccStatus = CCCrypt(encryptOperation,// 加密/解密kCCAlgorithmDES,// 加密根据哪个标准(des,3des,aes。。。。)kCCOptionPKCS7Padding,// 选项分组密码算法(des:对每块分组加一次密 3DES:对每块分组加三个不同的密)vkey, //密钥 加密和解密的密钥必须一致kCCKeySizeDES,// DES 密钥的大小(kCCKeySizeDES=8)iv, // 可选的初始矢量dataIn, // 数据的存储单元dataInLength,// 数据的大小dataOut,// 用于返回数据dataOutAvailable,&dataOutMoved);

    NSString *result = nil;

    if (encryptOperation == kCCDecrypt)//encryptOperation==1 解码{//得到解密出来的data数据,改变为utf-8的字符串result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:NSUTF8StringEncoding];}else //encryptOperation==0 (加密过程中,把加好密的数据转成base64的){//编码 base64NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];result = [GTMBase64 stringByEncodingData:data];}return [result UTF8String];}

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

</code></pre>

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

iOS中需要用到的GTMBase64库

$ret = base64_encode($aaa);

如果只需要DES加密的话,将Base64去掉即可

END

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

本文由大发体育娱乐在线发布于编程应用,转载请注明出处:双向互通DES

关键词:

最火资讯