TEA Algorithm Implementation on iOS
来源:互联网 发布:淘宝上如何发布宝贝 编辑:程序博客网 时间:2024/06/05 06:17
近日在项目当中,需要用到TEA算法,从网上找找看看,wiki上解释的比较详细了,具体见点击打开链接。但是相关的中文版本都传疯了,但却都是同一个版本(C/C++),内容完全一样,于是参照了一下相应的算法,写了个Object-C版本的。感谢Jiec的友情帮助。
//Tea Header file
#import <Foundation/Foundation.h>
#include <sys/types.h>
#include <netinet/in.h>
static int KEY[4] = {//加密解密所用的KEY
0x13E362D, 0xABEDC8AE,
0x111A0BD, 0x59EP869C
};
@interface Tea : NSObject{
@private
int _round;
bool _isNetByte;
Byte _key[16];
}
#pragma mark - Encrption and Decryption Prototypes
+ (NSString*)encryptByTea:(NSString*)src;
+ (NSString*)decryptByTea:(NSString*)src;
+ (NSString*)encryptByTea:(constByte*) key round:(int)round isNetByte:(BOOL)isNetByte src:(NSString*)src;
+ (NSString*)decryptByTea:(constByte*) key round:(int)round isNetByte:(BOOL)isNetByte encryptedSrc:(NSString*)encryptedSrc;
//Implementation file
#import "Tea.h"
@implementation Tea
#pragma mark - Encrption and Decryption Implementation
- (unsigned long) ntoh:(unsignedlong) netlong{
return self->_key ?ntohl(netlong) : netlong;
}
- (unsigned long) hton:(unsignedlong) hostlong{
return self->_isNetByte ?htonl(hostlong) : hostlong;
}
+ (NSString*)encryptByTea:(NSString*)src{
NSMutableString *result = [[NSMutableStringalloc]init];
NSRange range;
for (int offset =0; offset < [srclength]; offset +=8) {
range.location = offset;
range.length = [src length] - offset;
NSString *tme = [selfencryptByTea: (constByte*)KEY round:16isNetByte:YESsrc:[srcsubstringWithRange:range]];
[result appendString:tme];
}
return [result autorelease];
}
+ (NSString*)decryptByTea:(NSString*)src{
NSMutableString *result = [[NSMutableStringalloc]init];
NSRange range;
for (int offset =0; offset < [srclength]; offset +=8) {
range.location = offset;
range.length = [src length] - offset;
NSString *tme = [TeadecryptByTea:(constByte*)KEY round:16isNetByte:YESencryptedSrc:[srcsubstringWithRange:range]];
[result appendString:tme];
}
return [result autorelease];
}
+ (NSString*) encryptByTea:(constByte*) key round:(int)round isNetByte:(BOOL)isNetByte src:(NSString*)src{
int encryptedDes[20];
memset(encryptedDes, 0x00,20);
unsigned int *tmpsrc = (unsignedint*)[srcUTF8String];
unsigned int *k = (unsignedint*)key;
register int y =ntohl(tmpsrc[0]);
register int z =ntohl(tmpsrc[1]);
register int a =ntohl(k[0]);
register int b =ntohl(k[1]);
register int c =ntohl(k[2]);
register int d =ntohl(k[3]);
registerint delta =0x9E3779B9;/* (sqrt(5)-1)/2*2^32 */
register int sum =0;
while (round--) {/* basic cycle start */
sum += delta;
y += ((z << 4) + a) ^ (z + sum) ^ ((z >>5) + b);
z += ((y << 4) + c) ^ (y + sum) ^ ((y >>5) + d);
} /* end cycle */
encryptedDes[0] = ntohl(y);
encryptedDes[1] = ntohl(z);
// NSLog(@">>>enDes : %s <<< ",(char*)encryptedDes);
NSStringEncoding nse = [NSStringdefaultCStringEncoding];
NSString * str = [NSStringstringWithCString:(char*)encryptedDesencoding:nse];
return str;
}
+ (NSString*)decryptByTea:(constByte*) key round:(int)round isNetByte:(BOOL)isNetByte encryptedSrc:(NSString*)encryptedSrc{
unsigned long decryptedDes[20];
memset(decryptedDes, 0x0,20);
NSStringEncoding nse = [NSStringdefaultCStringEncoding];
char * tmpcs = (char *)[encryptedSrccStringUsingEncoding:nse];
int *tmpsrc = (int *)tmpcs;
int *k = (int*)key;
register int y =ntohl(tmpsrc[0]);
register int z =ntohl(tmpsrc[1]);
register int a =ntohl(k[0]);
register int b =ntohl(k[1]);
register int c =ntohl(k[2]);
register int d =ntohl(k[3]);
registerint delta =0x9E3779B9;/* (sqrt(5)-1)/2*2^32 */
register int sum =0;
if (round == 32)
sum = 0xC6EF3720;/* delta << 5*/
else if (round ==16)
sum = 0xE3779B90;/* delta << 4*/
else
sum = delta * round;
while (round--) {/* basic cycle start */
z -= ((y << 4) + c) ^ (y + sum) ^ ((y >>5) + d);
y -= ((z << 4) + a) ^ (z + sum) ^ ((z >>5) + b);
sum -= delta;
} /* end cycle */
decryptedDes[0] = ntohl(y);
decryptedDes[1] = ntohl(z);
NSString * str = [NSStringstringWithCString:(char*)decryptedDesencoding:nse];
NSLog(@"str:%@",str);
return str;
}
- TEA Algorithm Implementation on iOS
- TEA(Tiny Encryption Algorithm)
- FFT Algorithm Implementation
- Karatsuba algorithm C++ implementation
- Block TEA (Tiny Encryption Algorithm)
- HMAC implementation based on OPENSSL, Crypto API(CSP) and third party algorithm library
- Lempel-Ziv Algorithm's Implementation
- Very simple A* algorithm implementation
- Java MD5 Encryption Algorithm Implementation
- [Sonia] Implementation of Huffman Algorithm
- Algorithm: The implementation of Trie Tree (C++)
- implementation of General Sort Algorithm - mark
- Dijkstra's Shortest-Path Algorithm Implementation(TODO)
- MST implementation with Kruskal and Boruvka algorithm
- Implementation Of TDOA Using Chan Algorithm And Taylor Algorithm
- getpwnam() function implementation on android
- Cluster Implementation Based On RHEL
- ios @interface @implementation
- 利用静态库实现控件封装
- 【100题】斐波那契数列(3)-----数学归纳法
- 二叉树的实现
- error C2143: syntax error : missing ';' before 'type'
- asp.net2.0中读取web.config数据库连接字符串
- TEA Algorithm Implementation on iOS
- USCAO section 1.4 The Clocks
- IOS 如何保存图片到document实例
- IOS UIScrollView
- intent中取得mimetype
- 孩子兄弟表示法实现树
- IOS 如何保存图片到相册实例
- oracle wallet使用与维护---oracle无密码登录
- namespace