我正在嘗試爲我的學校開發一個與PowerSchool交互的應用程序,該程序允許用戶查看他們的成績,教師,日程安排等等。我找到了一個與PowerSchool交互的基礎知識庫,使用PHP編寫,並且一直試圖在過去的一週內以客觀的方式編寫它。看來問題是我如何用用戶的密碼創建一個HMAC(MD5)。要麼我使用十六進制文摘而不是摘要,不確定。我從服務器返回的錯誤是奇數個字符。 這裏是鏈接到PHP庫類,我試圖重新創造: https://github.com/horvste/powerapi-php/blob/master/src/PowerAPI/Core.php 這是我在我的測試項目代碼, 命令行主類: https://gist.github.com/anonymous/c40cdd99a826c06073aa NSString的類別執行文件:HMAC將密碼發送到網站時遇到問題
#import "NSString+MyAdditions.h"
@implementation NSString (MyAdditions)
- (NSString *) hmacMD5WithData: (NSString *) data
{
const char *cKey = [self cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [data cStringUsingEncoding:NSASCIIStringEncoding];
const unsigned int blockSize = 64;
char ipad[blockSize], opad[blockSize], keypad[blockSize];
unsigned int keyLen = strlen(cKey);
CC_MD5_CTX ctxt;
if(keyLen > blockSize)
{
//CC_MD5(cKey, keyLen, keypad);
CC_MD5_Init(&ctxt);
CC_MD5_Update(&ctxt, cKey, keyLen);
CC_MD5_Final((unsigned char *)keypad, &ctxt);
keyLen = CC_MD5_DIGEST_LENGTH;
}
else
{
memcpy(keypad, cKey, keyLen);
}
memset(ipad, 0x36, blockSize);
memset(opad, 0x5c, blockSize);
int i;
for(i = 0; i < keyLen; i++)
{
ipad[i] ^= keypad[i];
opad[i] ^= keypad[i];
}
CC_MD5_Init(&ctxt);
CC_MD5_Update(&ctxt, ipad, blockSize);
CC_MD5_Update(&ctxt, cData, strlen(cData));
unsigned char md5[CC_MD5_DIGEST_LENGTH];
CC_MD5_Final(md5, &ctxt);
CC_MD5_Init(&ctxt);
CC_MD5_Update(&ctxt, opad, blockSize);
CC_MD5_Update(&ctxt, md5, CC_MD5_DIGEST_LENGTH);
CC_MD5_Final(md5, &ctxt);
const unsigned int hex_len = CC_MD5_DIGEST_LENGTH*2+2;
char hex[hex_len];
for(i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
{
snprintf(&hex[i*2], hex_len-i*2, "%02x", md5[i]);
}
NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)];
NSString *hash = [HMAC base64EncodedStringWithOptions:0];
return hash;
}
@end
感謝您花時間看這個問題!
謝謝你的回覆,我會看看你提到的建議。我知道現在的問題是密碼,因爲我驗證了所有其他字段的正確設置。 Off主題我也來自北卡羅來納州的羅利。 – 2014-09-01 00:27:01
你應該出來Cocoaheads(http://www.meetup.com/nscoderrtp/)。帶上你的代碼。很多聰明的人在這個小組裏,我們每個星期都會見面(我試着不時地出去,儘管我比想象的要多)。關於密碼,它看起來像是由多個部分組成的,所以我會開始分解它以查看哪一步出錯。 – 2014-09-01 02:33:26
沒有。大多數人羣年齡偏大,但我們有少數青少年經常出席。 – 2014-09-01 03:30:34