des加密 ios 和java_三重Des对称加密在Android、Ios 和Java 平台的实现

//

//  CommonFunc.m

//  PRJ_base64

//

//  Created by wangzhipeng on 12-11-29.

//  Copyright (c) 2012年 com.comsoft. All rights reserved.

//

#import "MyBase64.h"

//引入IOS自带密码库

#import

//空字符串

#define LocalStr_None   @""

static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

@implementation MyBase64 : NSObject

+ (NSString *)base64StringFromText:(NSString *)text

{

if (text && ![text isEqualToString:LocalStr_None]) {

//取项目的bundleIdentifier作为KEY  改动了此处

//NSString *key = [[NSBundle mainBundle] bundleIdentifier];

NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];

//IOS 自带DES加密 Begin  改动了此处

//data = [self DESEncrypt:data WithKey:key];

//IOS 自带DES加密 End

return [self base64EncodedStringFrom:data];

}

else {

return LocalStr_None;

}

}

+ (NSString *)textFromBase64String:(NSString *)base64

{

if (base64 && ![base64 isEqualToString:LocalStr_None]) {

//取项目的bundleIdentifier作为KEY   改动了此处

//NSString *key = [[NSBundle mainBundle] bundleIdentifier];

NSData *data = [self dataWithBase64EncodedString:base64];

//IOS 自带DES解密 Begin    改动了此处

//data = [self DESDecrypt:data WithKey:key];

//IOS 自带DES加密 End

return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

}

else {

return LocalStr_None;

}

}

/******************************************************************************

函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key

函数描述 : 文本数据进行DES加密

输入参数 : (NSData *)data

(NSString *)key

输出参数 : N/A

返回参数 : (NSData *)

备注信息 : 此函数不可用于过长文本

******************************************************************************/

+ (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key

{

char keyPtr[kCCKeySizeAES256+1];

bzero(keyPtr, sizeof(keyPtr));

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [data length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,

kCCOptionPKCS7Padding | kCCOptionECBMode,

keyPtr, kCCBlockSizeDES,

NULL,

[data bytes], dataLength,

buffer, bufferSize,

&numBytesEncrypted);

if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

}

free(buffer);

return nil;

}

/******************************************************************************

函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key

函数描述 : 文本数据进行DES解密

输入参数 : (NSData *)data

(NSString *)key

输出参数 : N/A

返回参数 : (NSData *)

备注信息 : 此函数不可用于过长文本

******************************************************************************/

+ (NSData *)DESDecrypt:(NSData *)data WithKey:(NSString *)key

{

char keyPtr[kCCKeySizeAES256+1];

bzero(keyPtr, sizeof(keyPtr));

[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

NSUInteger dataLength = [data length];

size_t bufferSize = dataLength + kCCBlockSizeAES128;

void *buffer = malloc(bufferSize);

size_t numBytesDecrypted = 0;

CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,

kCCOptionPKCS7Padding | kCCOptionECBMode,

keyPtr, kCCBlockSizeDES,

NULL,

[data bytes], dataLength,

buffer, bufferSize,

&numBytesDecrypted);

if (cryptStatus == kCCSuccess) {

return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

}

free(buffer);

return nil;

}

/******************************************************************************

函数名称 : + (NSData *)dataWithBase64EncodedString:(NSString *)string

函数描述 : base64格式字符串转换为文本数据

输入参数 : (NSString *)string

输出参数 : N/A

返回参数 : (NSData *)

备注信息 :

******************************************************************************/

+ (NSData *)dataWithBase64EncodedString:(NSString *)string

{

if (string == nil)

[NSException raise:NSInvalidArgumentException format:nil];

if ([string length] == 0)

return [NSData data];

static char *decodingTable = NULL;

if (decodingTable == NULL)

{

decodingTable = malloc(256);

if (decodingTable == NULL)

return nil;

memset(decodingTable, CHAR_MAX, 256);

NSUInteger i;

for (i = 0; i < 64; i++)

decodingTable[(short)encodingTable[i]] = i;

}

const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];

if (characters == NULL)     //  Not an ASCII string!

return nil;

char *bytes = malloc((([string length] + 3) / 4) * 3);

if (bytes == NULL)

return nil;

NSUInteger length = 0;

NSUInteger i = 0;

while (YES)

{

char buffer[4];

short bufferLength;

for (bufferLength = 0; bufferLength < 4; i++)

{

if (characters[i] == '\0')

break;

if (isspace(characters[i]) || characters[i] == '=')

continue;

buffer[bufferLength] = decodingTable[(short)characters[i]];

if (buffer[bufferLength++] == CHAR_MAX)      //  Illegal character!

{

free(bytes);

return nil;

}

}

if (bufferLength == 0)

break;

if (bufferLength == 1)      //  At least two characters are needed to produce one byte!

{

free(bytes);

return nil;

}

//  Decode the characters in the buffer to bytes.

bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4);

if (bufferLength > 2)

bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2);

if (bufferLength > 3)

bytes[length++] = (buffer[2] << 6) | buffer[3];

}

bytes = realloc(bytes, length);

return [NSData dataWithBytesNoCopy:bytes length:length];

}

/******************************************************************************

函数名称 : + (NSString *)base64EncodedStringFrom:(NSData *)data

函数描述 : 文本数据转换为base64格式字符串

输入参数 : (NSData *)data

输出参数 : N/A

返回参数 : (NSString *)

备注信息 :

******************************************************************************/

+ (NSString *)base64EncodedStringFrom:(NSData *)data

{

if ([data length] == 0)

return @"";

char *characters = malloc((([data length] + 2) / 3) * 4);

if (characters == NULL)

return nil;

NSUInteger length = 0;

NSUInteger i = 0;

while (i < [data length])

{

char buffer[3] = {0,0,0};

short bufferLength = 0;

while (bufferLength < 3 && i < [data length])

buffer[bufferLength++] = ((char *)[data bytes])[i++];

//  Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.

characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];

characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];

if (bufferLength > 1)

characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];

else characters[length++] = '=';

if (bufferLength > 2)

characters[length++] = encodingTable[buffer[2] & 0x3F];

else characters[length++] = '=';

}

return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];

}

@end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BZOJ2976 : [Poi2002]出圈游戏

首先模拟一遍得到n个同余方程&#xff0c;然后用扩展欧几里得求出最小的可行解即可&#xff0c;时间复杂度$O(n^2)$。 #include<cstdio> #define N 30 int n,i,j,k,x,y,a[N],b[N],d[N],ans; namespace Solve{ int flag1,k1,m0,d,x,y; int exgcd(int a,int b,int&x,in…

java awt 教程_JAVA教程 第五讲 AWT图形用户界面设计

5.1 用AWT生成图形化用户界面抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集&#xff0c;AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括&#xff1a; 用户界面组件&am…

从C# String类理解Unicode(UTF8/UTF16)

上一篇博客&#xff1a;从字节理解Unicode&#xff08;UTF8/UTF16)。这次我将从C# code 中再一次阐述上篇博客的内容。 C# 代码看UTF8 代码如下&#xff1a; string test "UTF-8你"; //把字符转换为 byte[] byte[] bytearray_UTF8 Encoding.UTF8.GetBytes(test)…

java mvc mvp_MVC和MVP设计模式

参考博客http://www.cnblogs.com/end/archive/2011/06/02/2068512.html####MVC模式M&#xff1a;model 模型V&#xff1a;view视图C&#xff1a;controller控制器>我们知道&#xff0c;所有的软件的构成主要有两部分&#xff0c;分别是用户交互入口(USER INTERFACE)和数据(D…

python浅拷贝深拷贝

copy_listlist[:] 得到的是浅拷贝&#xff0c;即只能顶层拷贝&#xff0c;里面的嵌套不会复制一份。 a [0, [1, 2], 3] b a[:] a[0] 8 a[1][1] 9 请问现在a和b分别是多少&#xff1f; 答案&#xff1a;是 a 为 [8, [1, 9], 3]&#xff0c;b 为 [0, [1, 9], 3]。 b的第二个…

[转载] KAFKA分布式消息系统

转载自http://blog.chinaunix.net/uid-20196318-id-2420884.html Kafka[1]是linkedin用于日志处理的分布式消息队列&#xff0c;linkedin的日志数据容量大&#xff0c;但对可靠性要求不高&#xff0c;其日志数据主要包括用户行为&#xff08;登录、浏览、点击、分享、喜欢&…

java sleep唤醒_JAVA wait(), notify(),sleep详解(转)

在JAVA中&#xff0c;是没有类似于PV操作、进程互斥等相干的方法的。JAVA的进程同步是通过synchronized()来实现的&#xff0c;需要说明的是&#xff0c;JAVA的synchronized()方法类似于操作系统概念中的互斥内存块&#xff0c;在JAVA中的Object类型中&#xff0c;都是带有1个内…

ACM 错排

Description 大家常常感慨&#xff0c;要做好一件事情真的不容易&#xff0c;确实&#xff0c;失败比成功容易多了&#xff01; 做好“一件”事情尚且不易&#xff0c;若想永远成功而总从不失败&#xff0c;那更是难上加难了&#xff0c;就像花钱总是比挣钱容易的道理一样。 话…

Linux的NTP配置总结

在Linux系统中&#xff0c;为了避免主机时间因为在长时间运行下所导致的时间偏差&#xff0c;进行时间同步(synchronize)的工作是非常必要的。Linux系统下&#xff0c;一般使用ntp服务来同步不同机器的时间。NTP 是网络时间协议&#xff08;Network Time Protocol&#xff09;的…

mysql_real_connect阻塞_mysql_real_connect崩溃、未经处理的异常

mysql_real_connect崩溃、未经处理的异常背景近期客户测试软件&#xff0c;功能里有mysql连接问题&#xff0c;在mysql连接失败时&#xff0c;客户机器上出现“已停止工作”界面&#xff0c;而我机器上软件直接退出没有提示自动关闭。查找分析因为是一直用的代码&#xff0c;和…

java中settimeout作用_关于setTimeout的妙用

定义在指定的延迟时间之后调用一个函数或执行一个代码片段这个是setTimeout最主要的功能&#xff0c;但也是很坑的地方&#xff0c;首先javascript其实是运行在单线程的环境下&#xff0c;意味者定时器会在未来的某个时间支持&#xff0c;但是具体的执行的时间并不能够很准确的…

中兴的一道笔试题

今天做了中兴的秋招题目&#xff0c;有一个题以前没有仔细想过&#xff0c;题目我有点儿记不清楚了&#xff0c;大概意思是这样的&#xff1a;有一个循环的单链表&#xff0c;给定该链表的尾指针比给定头指针好么&#xff1f; 我的思路&#xff1a;如下图&#xff0c;这是一个循…

Linux read 命令

Linux read命令用于从标准输入读取数值。 read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入&#xff0c;当使用重定向的时候&#xff0c;可以读取文件中的一行数据。 语法 read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] […

放图片 java_java怎么在我想要的图片上在放一个我想要的图片

展开全部import javax.imageio.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.awt.geom.*;import java.io.*;import java.util.*;/*** author Hardneedl*/final class PicDemo extends JFrame {public String getTitle() {return "PicDe…

Ext-ajax请求数据

Ext.Ajax.request({url: webPath/news/newsEastmoneyList,method: POST,success: function (response, options) {var data Ext.decode(response.responseText);if(data.success){list.getStore().load({page:1});Ext.Msg.alert(提示,提取成功&#xff0c;共提取data.zg条.);}…

java .net des_DES加密解密 JAVA与.NET互通程序代码

JAVA版本import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DESKeySpec;import javax.crypto.spec.IvParameterSpec;public class Des {private byte[] desKey;//解密数据public static String decryp…

linux 查找文件或者服务

[rootlocalhost ~]# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /usr/share/mysql /usr/share/man/man1/mysql.1.gz [rootlocalhost ~]# which mysql /usr/bin/mysql转载于:https://www.cnblogs.com/adolfmc/p/4749224.html

android java 调用js_android WebApp 集成方式怎么使用java调用js

WebAPP集成&#xff0c;本地打包&#xff0c;有两种方式java js通信1.DCloud插件模式&#xff0c;参考SDK DEMO的H5Plugin&#xff0c;Java:继承StandardFeature写接口。public class DBControlPlugin extends StandardFeature{public void PluginTestFunction(IWebview pWebvi…

Android SurfaceView实现静态于动态画图效果

本文是基于Android的SurfaceView的动态画图效果&#xff0c;实现静态和动态下的正弦波画图&#xff0c;可作为自己做图的简单参考&#xff0c;废话不多说&#xff0c;先上图&#xff0c; 静态效果&#xff1a; 动态效果&#xff1a; 比较简单&#xff0c;代码注释的也比较详细&…

java ip调天气预报接口_JAVA + WeatherWebService 实现天气预报接口调取

两步完成接口调取第一步&#xff1a;引入jar包若在线jar包失效&#xff0c;私信我即可。第二步&#xff1a;创建类实现在JAVA项目中创建java类(我的是&#xff1a;WeatherUtil)修改类中cityid为你需要展示的地区id,我的是上海的【cityid查询】WeatherUtil类代码&#xff1a;imp…