【发布时间】:2015-02-22 21:28:05
【问题描述】:
很遗憾,我看不懂 php 代码,但我需要将此 php 代码转换为 Objective-C。 可能谁知道Objective C中XOR加密的其他方式?
我需要这是结果加密:
key: kbyz5eH64z
string: {"date":"01.01.2014 00:00:00","value":5}
encrypted: rDi66Mfqu9y8kvs%2F3Fc%2Fg%2BX5N%2FPtARgPDP7Gk7lLvOxUFNyglxogVA%3D%3D
decrypted: {"date":"01'�Mi�����q�=���e� #~�E�����i�11
我找到的php代码:
function strcode($str, $passw="")
{
$salt = "Dn8*#2n!9j";
$len = strlen($str);
$gamma = '';
$n = $len>100 ? 8 : 2;
while( strlen($gamma)<$len )
{
$gamma .= substr(pack('H*', sha1($passw.$gamma.$salt)), 0, $n);
}
return $str^$gamma;
}
$txt = "Hello XOR encode!";
$txt = base64_encode(strcode($txt, 'mypassword'));
echo $txt;
/* result - ZOHdWKf+cf7vAwpJNfSJ8s8= */
$txt = "ZOHdWKf+cf7vAwpJNfSJ8s8=";
$txt = strcode(base64_decode($txt), 'mypassword');
echo $txt;
/* result - Hello XOR encode! */
我尝试使用此代码,但它不适用于我的示例,因为加密字符串与示例中的不同 (rDi66Mfqu9y8kvs%2F3Fc%2Fg%2BX5N%2FPtARgPDP7Gk7lLvOxUFNyglxogVA%3D%3D):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"json"];
NSData *content = [[NSData alloc] initWithContentsOfFile:filePath];
NSString* jsonString = [[NSString alloc] initWithData:content encoding:NSUTF8StringEncoding];
NSLog(@"Input string:%@", jsonString);
NSString *obfuscatedStr = [[self obfuscate:jsonString withKey:@"kbyz5eH64z"] base64EncodedStringWithOptions:0];
NSLog(@"Obfuscated string:%@", obfuscatedStr);
return YES;
}
- (NSData *)obfuscate:(NSString *)string withKey:(NSString *)key
{
// Create data object from the string
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
// Get pointer to data to obfuscate
char *dataPtr = (char *) [data bytes];
// Get pointer to key data
char *keyData = (char *) [[key dataUsingEncoding:NSUTF8StringEncoding] bytes];
// Points to each char in sequence in the key
char *keyPtr = keyData;
int keyIndex = 0;
// For each character in data, xor with current value in key
for (int x = 0; x < [data length]; x++)
{
// Replace current character in data with
// current character xor'd with current key value.
// Bump each pointer to the next character
*dataPtr = *dataPtr ^ *keyPtr;
dataPtr++;
keyPtr++;
// If at end of key data, reset count and
// set key pointer back to start of key value
if (++keyIndex == [key length])
keyIndex = 0, keyPtr = keyData;
}
return [[NSData alloc] initWithData:data];
}
【问题讨论】:
-
encrypted实际上是(替换十六进制):"rDi66Mfqu9y8kvs/3Fc/g+X5N/PtARgPDP7Gk7lLvOxUFNyglxogVA==" 这是有效的 Base64 编码。 -
顺便说一句,{"date":"01.01.2014 00:00:00","value":5} 不是字符串。
标签: php ios objective-c encryption