1

次の「some text <40 byte hash>」のようなものを解析する必要があります。40 バイトのハッシュ部分を破損することなく、この全体を文字列に読み込むことができますか?

問題は、ハッシュが存在しないため、読み取り中に処理したくないということです。

編集: 40 バイトのハッシュは 2x20 バイトのハッシュであり、生のバイトをエンコードしていないことを忘れていました。

4

5 に答える 5

1

入力ストリームからバイト ストリームとして読み取り、次のようにストリームから文字列を取り除きます。

String s = new String(Arrays.copyOfRange(bytes, 0, bytes.length-40));

次に、バイトを次のように取得します。

byte[] hash = Arrays.copyOfRange(bytes, s.length-1, bytes.length-1)
于 2009-07-02T15:23:51.300 に答える
0

OK、これらが生のバイトであることを明確にしたので、

いいえ、これを文字列として Java に読み込むことはできません。生のバイトとして読み込む必要があります。

于 2009-06-30T18:12:24.933 に答える
0

もう少し詳細が役立つかもしれませんが、答えはあなたが大丈夫だということだと思います.

SHA-1 ハッシュがどのようにエンコードされたかについては言及していません (一般的な可能性としては、「なし」(生のバイト)、Base64、および 16 進数が含まれます)。SHA-1 は 20 バイト (160 ビット) のハッシュを生成するため、16 進数を使用してエンコードされると推測しています。そのエンコーディングでは、0 から 9 までの記号と A から F までの記号を使用して、ハッシュからの各バイトをエンコードするために 2 文字が使用されます。これらはすべて ASCII 文字であるため、安全です。

Base64で使用される各文字もASCIIであるため、Base64エンコーディングも機能します(ただし、サイズが約1/3増加して40バイト未満になるため、おそらくあなたが尋ねたものではありません)。

生のバイトが直接使用された場合、一部の値が有効な文字ではないため、問題が発生します。

于 2009-06-30T00:18:36.307 に答える
0

WORKING CODE: バイト文字列入力を 16 進文字に変換します。これは、ほとんどすべての文字列エンコーディングで安全です。他の質問に投稿したコードを使用して、16 進文字を生のバイトにデコードします。

/** Lookup table: character for a half-byte */
    static final char[] CHAR_FOR_BYTE = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    /** Encode byte data as a hex string... hex chars are UPPERCASE */
    public static String encode(byte[] data){
        if(data == null || data.length==0){
            return null;
        }
        char[] store = new char[data.length*2];
        for(int i=0; i<data.length; i++){
            final int val = (data[i]&0xFF);
            final int charLoc=i<<1;
            store[charLoc]=CHAR_FOR_BYTE[val>>>4];
            store[charLoc+1]=CHAR_FOR_BYTE[val&0x0F];
        }
        return new String(store);
    }
于 2009-06-30T18:53:31.993 に答える
0

SHA-1 ハッシュの長さは 20 バイト (160 ビット) です。40 文字のハッシュを扱っている場合、それらはおそらくハッシュの ASCII 表現であるため、文字 0 ~ 9 と af のみが含まれます。この場合、Java で問題なく文字列を読み取って操作できるはずです。

于 2009-06-30T00:10:19.850 に答える