문제

이 페이지에서 :

http://www.shutterfly.com/documentation/oflycallsignature.sfly

해시를 생성 한 후에는 다음과 같습니다.

해시를 16 진 문자 문자열로 변환하십시오

csharp에 이것을 할 코드가 있습니까?

도움이 되었습니까?

해결책

해시를 얻으려면 System.Security.Cryptography.SHA1Managed 수업.

편집하다: 이와 같이:

byte[] hashBytes = new SHA1Managed().ComputeHash(Encoding.UTF8.GetBytes(str));

해시를 육각 문자열로 변환하려면 다음 코드를 사용하십시오.

BitConverter.ToString(hashBytes).Replace("-", "");

더 빠른 구현을 원한다면 다음 기능을 사용하십시오.

private static char ToHexDigit(int i) {
    if (i < 10) 
        return (char)(i + '0');
    return (char)(i - 10 + 'A');
}
public static string ToHexString(byte[] bytes) {
    var chars = new char[bytes.Length * 2 + 2];

    chars[0] = '0';
    chars[1] = 'x';

    for (int i = 0; i < bytes.Length; i++) {
        chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
        chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);
    }

    return new string(chars);
}

다른 팁

나는 아직 충분한 반복하지 않지만 Lior는 매우 잘못된 대답으로 Java를 C#과 혼합하고 있습니다.

C#의 바이트는 서명되지 않은 바이트이며, 이는 기본적으로 서명 된 C#의 다른 모든 정수 유형과 완전히 반대입니다.

바이트가 서명하더라도 0xfe는 0xfe가 -2이기 때문에 0xff 부분은 완전히 무의미합니다. 예를 들어 비트와 0xfe 및 0xff와 함께 사용한다고해서 음수 0xfe가 결과가되는 것을 막을 수는 없습니다. 0x7f.

최고 답변과 관련하여, 나는 이러한 미세 최적화가 도움이 될 것이라고 확신하지만, JIT 컴파일러가 다른 일을 할 수 있고 컴퓨터가 너무 타오르는 것이기 때문에 실제 차이를 만들지 않을 가능성이있는 미세 최적화가 도움이 될 것이라고 확신합니다. 빠른.

    chars[2 * i + 2] = ToHexDigit(bytes[i] / 16);
    chars[2 * i + 3] = ToHexDigit(bytes[i] % 16);

디바이더와 모듈로 대신 비트 시프트 및 비트 옵스를 사용하도록 작은 변화.

    chars[2 * i + 2] = ToHexDigit((bytes[i] >> 4) & 0xF);
    chars[2 * i + 3] = ToHexDigit(bytes[i] & 0xF);

이것은 다른 "최적화"입니다. 어쩌면 나는 ASCII 테이블의 대부분을 마음으로 알고 있기 때문일 것입니다.

    private static char ToHexDigit(int i)
    {
        return (char)(i + (i < 10 ? 48 : 55));
    }

소문자 16 진수를 달성하려는 경우 (Tolower없이) 55를 87로 바꾸십시오. 아주 간단하게 만듭니다.

업데이트 : Lior 또는 누군가가 그의 대답을 제거한 것처럼 보입니다. 그것은 좋은 움직임이었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top