2019独角兽企业重金招聘Python工程师标准>>>

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{/// <summary>/// DES加密方法/// </summary>/// <param name="strPlain">明文</param>/// <param name="strDESKey">密钥</param>/// <param name="strDESIV">向量</param>/// <returns>密文</returns>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;}}/// <summary>/// 进行DES解密。/// </summary>/// <param name="pToDecrypt">要解密的base64串</param>/// <param name="sKey">密钥,且必须为8位。</param>/// <returns>已解密的字符串。</returns>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 <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>@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 *)sKeycontext:(CCOperation)encryptOrDecrypt;@end@implementation JoDes+ (NSString *) encode:(NSString *)str key:(NSString *)key
{// doCipher 不能编汉字,所以要进行 url encodeNSMutableString* 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 0break;}// 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 __ 255static char decodingTable[256] = {__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__,  // 0x00 - 0x0F__,__,__,__, __,__,__,__, __,__,__,__, __,__,__,__,  // 0x10 - 0x1F__,__,__,__, __,__,__,__, __,__,__,62, __,__,__,63,  // 0x20 - 0x2F52,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 - 0x4F15,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 - 0x6F41,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 anyif( 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 *)sKeycontext:(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 opkCCAlgorithmDES, // CCAlgorithm algkCCOptionPKCS7Padding, // 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 *dataOutbufferPtrSize1,     // 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.cnblogs.com/pengxl/p/3967040.html

转载于:https://my.oschina.net/u/698044/blog/601929

PHP、JAVA、C#、Object-C 通用的DES加密相关推荐

  1. PHP、C#、通用的DES加密

    2019独角兽企业重金招聘Python工程师标准>>> PHP class JoDES {private static $_instance = NULL;/*** @return ...

  2. 【Java工具类】(30)—DES加密工具类

    Java工具类(30)-DES加密工具类 package com.awifi.cloudnative.container.manage.provider.utils;import org.apache ...

  3. DES加密解密算法(前端后端)

    DES加密解密算法(前端&后端) 原作者 阿弥陀佛1114  原文链接:https://blog.csdn.net/zong1114/article/details/51754470 DES对 ...

  4. Java Generics示例教程 - 通用方法,类,接口

    Java Generics示例教程 - 通用方法,类,接口 Java Genrics是Java 5中引入的最重要的功能之一.如果您一直在使用Java Collections 对于版本5或更高版本,我确 ...

  5. [转]DES加密 java与.net可以相互加密解密两种方法

    [转]原文地址:http://jumpman.javaeye.com/blog/605996 DES加密 java与.net可以相互加密解密两种方法 文章分类:Java编程 通过这个方法可以实现jav ...

  6. java des ecb_java版DES加密解密(ECB模式)已测试。可以正常使用。 | 学步园

    package com.fhk.Decrypt; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.s ...

  7. JDO(Java Data Object )

    JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要 ...

  8. IOS、java支持DES加密

    最近在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当然不是看的原理,只是看看怎么能够实现.现在我们需要实现的是移动端和后台(java)数据加解密的配合,开始的时候考虑的使用RSA,因为RSA ...

  9. C#与java可以共用的DES加密解密

    C#的DES加密与解密算法我就不写了,主要写一下怎么去解密C#用DES加密后串,大家都知道C#的DES加密密钥长度是8位的,而java是8的倍数位,所以用普通的java中的DES是不行的,要解C#的加 ...

最新文章

  1. linux内核 机器码,u-boot与Linux内核机器码问题
  2. python清除缓存的命令_python – 重启django服务器时清除缓存的最佳位置
  3. pdf.js插件使用记录,在线打开pdf
  4. Pandas入门2(DataFunctions+Maps+groupby+sort_values)
  5. 进程异常行为-访问恶意下载源 解决方案_不要忽略服务器上的异常进程
  6. hexo+github+hexo-theme-matery搭建个人免费博客
  7. 电力企业计量生产运行系统总体解决方案
  8. div默认外边距是多少_CSS盒模型之内边距、边框、外边距 十九问(持续更新)...
  9. 利用K8S技术栈打造个人私有云(连载之:K8S环境理解和练手)
  10. ASP.NET MVC 3 Preview1发布
  11. 固态硬盘受损或数据删除,怎么办?详解各种恢复SSD数据方法
  12. 香港科技大学工学院理学硕士土木基建工程及管理(MSc CIEM)2022Fall宣讲会(线上)
  13. 计算机 编程 教程 pdf,[计算机软件及应用]PLC编程基础教程.pdf
  14. 大量数据表的优化方案
  15. 云视频会议已成未来发展必然趋势
  16. Redis——Redis的事务
  17. Codeforces Round #548 (Div. 2) C. Edgy Trees(dfs || 并查集)
  18. 第11届蓝桥杯省模拟赛
  19. 菊读图的dijkstra
  20. 可视化搭建,1天开发1款“智慧楼宇”应用

热门文章

  1. 数学实验------级数的性质猜测阿波罗飞船轨迹
  2. 账户系统如何应对高并发、热点账户等问题
  3. Homebrew 安装与配置 JDK
  4. 待业的日子--工作总结
  5. 支付宝 印刷文字识别_身份证识别
  6. Python: 学习系列之七:模块、PIPY及Anaconda
  7. MySQL 循环语句
  8. NOIP2010提高组 关押罪犯
  9. SpringBoot系列 - 集成Shiro权限管理
  10. solidity之函数篇