1. ホーム
  2. android

Androidで文字列をSHA1ハッシュ化する方法は?

2023-12-09 01:28:35

質問

Objective Cで、文字列をハッシュ化するために以下のコードを使用しています。

-(NSString *) sha1:(NSString*)stringToHash {    
    const char *cStr = [stringToHash UTF8String];
    unsigned char result[20];
    CC_SHA1( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
        result[0], result[1], result[2], result[3], 
        result[4], result[5], result[6], result[7],
        result[8], result[9], result[10], result[11],
        result[12], result[13], result[14], result[15],
        result[16], result[17], result[18], result[19]
        ];  
}

今、私はAndroidのために同じことが必要ですが、それを行う方法を見つけることができません。例えば、こんなものを見てきました。 AndroidでSHA1暗号を作る? しかし、それは私にiPhoneの場合と同じ結果を得ることはありません。どなたか正しい方向を示していただけませんか?

どのように解決するのですか?

Andoridは必要ありません。javaで簡単にできます。

簡単なjavaの例で、これが正しいsha1を返すかどうか試してみてください。

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class AeSimpleSHA1 {
    private static String convertToHex(byte[] data) {
        StringBuilder buf = new StringBuilder();
        for (byte b : data) {
            int halfbyte = (b >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                buf.append((0 <= halfbyte) && (halfbyte <= 9) ? (char) ('0' + halfbyte) : (char) ('a' + (halfbyte - 10)));
                halfbyte = b & 0x0F;
            } while (two_halfs++ < 1);
        }
        return buf.toString();
    }

    public static String SHA1(String text) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        byte[] textBytes = text.getBytes("iso-8859-1");
        md.update(textBytes, 0, textBytes.length);
        byte[] sha1hash = md.digest();
        return convertToHex(sha1hash);
    }
}

また、期待される sha1 が何であるかも教えてください。ObjectC が間違った処理をしている可能性があります。