将 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,但有细微的修改,我对 java 不是很好,所以这里有人可以帮助我吗?

我已经尝试过 j2objc 但我无法获得转换后的代码。

问候。

您的 Objective-C 代码使用 %02X 格式,因此在需要时将字节转换为前导零。您的 Java 代码使用 toHexString,它不会用零填充到 2 个十六进制数字,因此没有前导零。

你的结果的最后一个字节是唯一一个高四位为零的字节,所以你得到了唯一的差异。