将 java 代码转换为 objective c
converting java code to objective c
目前我得到了一个作业,使用 objective C、
将字符串转换为 md5
我已经测试了几个代码,但结果总是与服务器结果不同
(服务器端和手机端把字符串转成md5再比较结果是否相同)
这是来自服务器的代码
def ii = (userDetailsInstance.imei ?: "") + (userDetailsInstance.devideId ?: "") + (userDetailsInstance.imsi ?: "")
def digest = MessageDigest.getInstance("MD5")
digest.update(ii.getBytes());
def messageDigest = digest.digest();
def hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
这是我的,
- (NSString *)md5 {
const char * pointer = [self UTF8String];
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(pointer, (CC_LONG)strlen(pointer), md5Buffer);
NSMutableString * string = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[string appendFormat:@"%02x",md5Buffer[i]];
return string;
}
结果很相似
- 来自服务器的 md5 结果:b43ad0be803f612a9c3f6a6bc974434
- md5 来自 mycode 的结果:b43ad0be803f612a9c3f6a6bc9744304
- 两个结果都来自这个字符串:1A963D37-14D1-4725-8515-FBFB494D02AB
所以我认为这不是纯 md5,但有细微的修改,我对 java 不是很好,所以这里有人可以帮助我吗?
我已经尝试过 j2objc 但我无法获得转换后的代码。
问候。
您的 Objective-C 代码使用 %02X
格式,因此在需要时将字节转换为前导零。您的 Java 代码使用 toHexString
,它不会用零填充到 2 个十六进制数字,因此没有前导零。
你的结果的最后一个字节是唯一一个高四位为零的字节,所以你得到了唯一的差异。
目前我得到了一个作业,使用 objective C、
将字符串转换为 md5我已经测试了几个代码,但结果总是与服务器结果不同
(服务器端和手机端把字符串转成md5再比较结果是否相同)
这是来自服务器的代码
def ii = (userDetailsInstance.imei ?: "") + (userDetailsInstance.devideId ?: "") + (userDetailsInstance.imsi ?: "")
def digest = MessageDigest.getInstance("MD5")
digest.update(ii.getBytes());
def messageDigest = digest.digest();
def hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
这是我的,
- (NSString *)md5 {
const char * pointer = [self UTF8String];
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(pointer, (CC_LONG)strlen(pointer), md5Buffer);
NSMutableString * string = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[string appendFormat:@"%02x",md5Buffer[i]];
return string;
}
结果很相似
- 来自服务器的 md5 结果:b43ad0be803f612a9c3f6a6bc974434
- md5 来自 mycode 的结果:b43ad0be803f612a9c3f6a6bc9744304
- 两个结果都来自这个字符串:1A963D37-14D1-4725-8515-FBFB494D02AB
所以我认为这不是纯 md5,但有细微的修改,我对 java 不是很好,所以这里有人可以帮助我吗?
我已经尝试过 j2objc 但我无法获得转换后的代码。
问候。
您的 Objective-C 代码使用 %02X
格式,因此在需要时将字节转换为前导零。您的 Java 代码使用 toHexString
,它不会用零填充到 2 个十六进制数字,因此没有前导零。
你的结果的最后一个字节是唯一一个高四位为零的字节,所以你得到了唯一的差异。