Php NSString en/decode base64
我正在尝试将这些php函数等效为目标c中的encrype/decrypt 但到目前为止运气不好 我在obj-c中找不到任何base64_en/解码方法,有吗Php NSString en/decode base64,php,objective-c,base64,encryption,Php,Objective C,Base64,Encryption,我正在尝试将这些php函数等效为目标c中的encrype/decrypt 但到目前为止运气不好 我在obj-c中找不到任何base64_en/解码方法,有吗 function encrypt($string, $key) { $result = '';  for($i = 0; $i < strlen($string); $i++) { $char = substr($string, $i, 1); $keychar = sub
function encrypt($string, $key) {
$result = '';
 for($i = 0; $i < strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char) + ord($keychar));
$result .= $char;
 }

return base64_encode($result);
}
function decrypt($string, $key) {
$result = '';
$string = base64_decode($string);
for($i = 0; $i < strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char) - ord($keychar));
$result.=$char;
}
return $result;
}
函数加密($string,$key){
$结果='';
 对于($i=0;$i
已经有了!请查看我用于此任务的类别,它是一个用于将字符串转换为md5、base64等的
NSString
类别
从NSString
到NSData
:
+ (NSString *)encodeBase64WithString:(NSString *)strData {
return [NSString encodeBase64WithData:[strData dataUsingEncoding:NSUTF8StringEncoding]];
}
+ (NSString *)encodeBase64WithData:(NSData *)objData {
const unsigned char * objRawData = [objData bytes];
char * objPointer;
char * strResult;
// Get the Raw Data length and ensure we actually have data
int intLength = [objData length];
if (intLength == 0) return nil;
// Setup the String-based Result placeholder and pointer within that placeholder
strResult = (char *)calloc(((intLength + 2) / 3) * 4, sizeof(char));
objPointer = strResult;
// Iterate through everything
while (intLength > 2) { // keep going until we have less than 24 bits
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[((objRawData[1] & 0x0f) << 2) + (objRawData[2] >> 6)];
*objPointer++ = _base64EncodingTable[objRawData[2] & 0x3f];
// we just handled 3 octets (24 bits) of data
objRawData += 3;
intLength -= 3;
}
// now deal with the tail end of things
if (intLength != 0) {
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
if (intLength > 1) {
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[(objRawData[1] & 0x0f) << 2];
*objPointer++ = '=';
} else {
*objPointer++ = _base64EncodingTable[(objRawData[0] & 0x03) << 4];
*objPointer++ = '=';
*objPointer++ = '=';
}
}
// Terminate the string-based result
*objPointer = '\0';
// Return the results as an NSString object
return [NSString stringWithCString:strResult encoding:NSASCIIStringEncoding];
}
从NSData
编码:
+ (NSString *)encodeBase64WithString:(NSString *)strData {
return [NSString encodeBase64WithData:[strData dataUsingEncoding:NSUTF8StringEncoding]];
}
+ (NSString *)encodeBase64WithData:(NSData *)objData {
const unsigned char * objRawData = [objData bytes];
char * objPointer;
char * strResult;
// Get the Raw Data length and ensure we actually have data
int intLength = [objData length];
if (intLength == 0) return nil;
// Setup the String-based Result placeholder and pointer within that placeholder
strResult = (char *)calloc(((intLength + 2) / 3) * 4, sizeof(char));
objPointer = strResult;
// Iterate through everything
while (intLength > 2) { // keep going until we have less than 24 bits
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[((objRawData[1] & 0x0f) << 2) + (objRawData[2] >> 6)];
*objPointer++ = _base64EncodingTable[objRawData[2] & 0x3f];
// we just handled 3 octets (24 bits) of data
objRawData += 3;
intLength -= 3;
}
// now deal with the tail end of things
if (intLength != 0) {
*objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
if (intLength > 1) {
*objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
*objPointer++ = _base64EncodingTable[(objRawData[1] & 0x0f) << 2];
*objPointer++ = '=';
} else {
*objPointer++ = _base64EncodingTable[(objRawData[0] & 0x03) << 4];
*objPointer++ = '=';
*objPointer++ = '=';
}
}
// Terminate the string-based result
*objPointer = '\0';
// Return the results as an NSString object
return [NSString stringWithCString:strResult encoding:NSASCIIStringEncoding];
}
+(NSString*)encodebase64 with data:(NSData*)objData{
常量无符号字符*objRawData=[objData字节];
字符*对象指针;
char*strResult;
//获取原始数据长度并确保我们实际拥有数据
int intLength=[objData length];
如果(intLength==0),则返回nil;
//在占位符中设置基于字符串的结果占位符和指针
strResult=(char*)calloc((intLength+2)/3)*4,sizeof(char));
objPointer=strResult;
//遍历所有内容
而(intLength>2){//继续,直到少于24位
*objPointer++=_base64编码表[objRawData[0]>>2];
*objPointer++=_base64编码表[(objRawData[0]&0x03)>4];
*objPointer++=_base64编码表[(objRawData[1]&0x0f)>6];
*objPointer++=_base64编码表[objRawData[2]&0x3f];
//我们只处理了3个八位字节(24位)的数据
objRawData+=3;
intLength-=3;
}
//现在来处理事情的结尾
if(intLength!=0){
*objPointer++=_base64编码表[objRawData[0]>>2];
如果(intLength>1){
*objPointer++=_base64编码表[(objRawData[0]&0x03)>4];
*objPointer++=_base64编码表[(objRawData[1]&0x0f)0)){
//此时填充字符无效,因此整个字符串无效
免费(objResult);
返回零;
}
继续;
}
intCurrent=_base64DecodingTable[intCurrent];
如果(intCurrent==-1){
//我们在空白处--只需跳过
继续;
}else if(intCurrent==-2){
//我们的角色无效
免费(objResult);
返回零;
}
交换机(i%4){
案例0:
objResult[j]=intCurrent>4;
objResult[j]=(intCurrent&0x0f)>2;
objResult[j]=(intCurrent&0x03)次要问题:转换到Base64或从Base64转换不是加密/解密。如果您搜索“IOS Base64”你会发现一些第三方Base64转换包,比如我使用的是相同的代码,或者非常类似的代码,它不支持特殊字符。部分原因是他的加密方法增加了2个字符的ASCII码的值。使用NSASCIIStringEncoding
只能访问ASCII表的前128个字符,因此,那些base64方法将不起作用。但它适用于常规文本。部分原因是,在您的encode方法中,您正在将NSData转换为const unsigned char*
到NSASCIIStringEncoding
。这样,您将丢失前128个字符,这将导致字符丢失。