사용자의 성적, 교사, 일정 등을 볼 수있는 소프트웨어 인 PowerSchool과 상호 작용하는 학교용 앱을 만들려고합니다. 저는 PHP로 작성된 PowerSchool과 상호 작용하는 기본 라이브러리를 발견했으며 지난 주 동안 객관적으로 C로 작성하려고했습니다. 문제는 사용자의 암호로 HMAC (MD5)를 만드는 방법입니다. 어느 것이 든 다이제스트가 아닌 16 진수 다이제스트를 사용하고 있습니다. 확실하지 않습니다. 서버에서 돌아 오는 오류는 홀수 문자입니다. 여기 내가 애 쓰고 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
시간을내어이 문제를 살펴 줘서 고맙습니다!
답변 해 주셔서 감사 드리며 말씀 드린 제안을 살펴 보겠습니다. 나는 다른 모든 필드가 올바르게 만들어 졌음을 확인 했으므로 문제는 암호와 관련이 있음을 알고 있습니다. 화제 떨어져 나는 또한 Raleigh, NC에서이다. –
코코아 헤드 (http://www.meetup.com/nscoderrtp/)에 나와야합니다. 코드를 가져 오십시오. 그룹의 영리한 사람들이 많고 매주 만나 죠 (나는 지금 나가고 싶어요. 내가 원하는 것 이상을 놓치더라도). 패스워드는 여러 조각으로 만들어져있는 것처럼 보입니다. 그래서 어떤 단계가 잘못되었는지 확인하기 위해 암호를 해독하기 시작합니다. –
없습니다. 대부분 조금 나이 먹은 군중이지만, 정기적으로 출석하는 소수의 청소년도 있습니다. –