From a065e04d529da1d847b5062a12c46d916408bf32 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 21:46:22 -0500 Subject: update based on https://github.com/mdn/yari/issues/2028 --- files/ko/nsicryptohash/index.html | 271 -------------------------------------- 1 file changed, 271 deletions(-) delete mode 100644 files/ko/nsicryptohash/index.html (limited to 'files/ko/nsicryptohash/index.html') diff --git a/files/ko/nsicryptohash/index.html b/files/ko/nsicryptohash/index.html deleted file mode 100644 index a7d656279f..0000000000 --- a/files/ko/nsicryptohash/index.html +++ /dev/null @@ -1,271 +0,0 @@ ---- -title: nsICryptoHash -slug: nsICryptoHash -tags: - - Add-ons - - Extensions - - Interfaces - - 'Interfaces:Scriptable' -translation_of: Mozilla/Tech/XPCOM/Reference/Interface/nsICryptoHash ---- -

 

- -

소개

- -

nsICryptoHash는 자료의 암호 해쉬 함수를 계산하기 위해 사용합니다. 예를 들어 파일이 담고 있는 데이터가 기대한 것인지 확인하기 위해 MD5 해쉬를 계산할 수 있습니다. 제공되는 해쉬 알고리즘은 MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512입니다. 이 인터페이스는 파이어폭스 1.5 버전 이상에서만 사용할 수 있습니다.

- -

-
netwerk/base/public/nsICryptoHash.idl스크립트에서 사용 가능
- - -Please add a summary to this article. - - -
-  -Last changed in Gecko 1.8 (Firefox 1.5 / Thunderbird 1.5 / SeaMonkey 1.0)
-

- -

상수

- -

해쉬 알고리즘

- -

이 상수들은 인터페이스가 제공하는 해쉬 알고리즘을 나타냅니다. 사용가능한 것은 다음과 같습니다. :

- - - -

메서드

- -

init

- -
void init(in unsigned long aAlgorithm);
-
- -

init()는 인터페이스에 정의된 상수를 이용하여 해쉬 알고리즘을 결정하여 객체를 초기화합니다. 객체의 자료를 갱신하기 전에 반드시 이 메서드나 initWithString()를 호출해야 합니다.

- -
패러미터
- -

aAlgorithm

- -
-
해쉬 알고리즘을 선택합니다. 인터페이스에 정의된 상수 중 하나를 선택해야 합니다.
-
- -
예외
- -

NS_ERROR_INVALID_ARG

- -
-
지원하지 않는 해쉬 알고리즘이 선택되었다는 것을 알립니다.
-
- -

initWithString

- -
void initWithString(in ACString aAlgorithm);
-
- -

initWithString()"MD5"와 같이 문자열로 된 알고리즘의 이름으로 해쉬 알고리즘을 선택하여 객체를 초기화한다. 객체의 자료를 갱신하기 전에 반드시 이 메서드나 init()를 호출해야 합니다.

- -
패러미터
- -

aAlgorithm

- -
-
사용할 해쉬 알고리즘이 선택합니다.
-
- -
예외
- -

NS_ERROR_INVALID_ARG

- -
-
지원하지 않는 해쉬 알고리즘이 선택되었다는 것을 알립니다.
-
- -

update

- -
void update([const, array, size_is(aLen)] in octet aData, in unsigned long aLen);
-
- -

update()는 해쉬된 자료 배열을 객체에 추가합니다. 이 메서드 사용 예제는 문자열 해쉬 연산하기를 보세요.

- -
패러미터
- -

aData

- -
-
해쉬를 계산하기 위해 넘기는 버퍼
-
- -

aLen

- -
-
버퍼 aData의 길이
-
- -
예외
- -

NS_ERROR_NOT_INITIALIZED

- -
-
init()initWithString()가 호출되지 않았다는 것을 알립니다.
-
- -

updateFromStream

- -
void updateFromStream(in nsIInputStream aStream, in unsigned long aLen);
-
- -

updateFromStream()nsIInputStream로 해쉬될 데이터를 추가합니다. 이 메서드의 사용 예제는 파일 해쉬 연산하기를 보세요.

- -
패러미터
- -

aStream

- -
-
읽어올 입력 스트림
-
- -

aLen

- -
-
aStream으로 부터 읽을 양을 결정합니다. 해쉬 갱신할 수 있는 최대 양으로 지정하려면 PR_UINT32_MAX를 전달하면 됩니다.
-
- -
예외
- -

NS_ERROR_NOT_INITIALIZED

- -
-
init()initWithString()가 호출되지 않았다는 것을 알립니다.
-
- -

NS_ERROR_NOT_AVAILABLE

- -
-
해쉬 연산 자료량이 허용되지 않습니다.
-
- -

finish

- -
ACString finish(in PRBool aASCII);
-
- -

finish() 메서드는 해쉬 객체를 완성시켜 실제 해쉬 자료를 생성합니다.

- -
패러미터
- -

aASCII

- -
-
참이면 반환 값은 base 64 인코딩된 문자열입니다. 거짓이면 이진(binary) 자료로 반환합니다.
-
- -
반환 값
- -

이 메서드는 객체가 읽은 자료의 해쉬를 반환합니다. 이 반환 값은 이진 자료일 수 있고 base 64 인코딩된 문자열일 수 있습니다.

- -
예외
- -

NS_ERROR_NOT_INITIALIZED

- -
-
init()initWithString()가 호출되지 않았다는 것을 알립니다.
-
- -
주의: 이 메서드는 init()가 호출된 후로 수회 실행이 가능합니다. 이 호출은 객체를 초기상태로 만듭니다.
- -

예제 코드

- -
주의: 아래의 예제는 파이어폭스 2에 구현된 자바스크립트 1.7의 특성을 사용합니다. 파이어폭스 1.5에서 예제를 사용할려면 배열 통합(array comprehension) 대신에 반복을 사용하세요.
- -

파일 해쉬 연산하기

- -

nsICryptoHash를 사용하여 파일 해쉬 연산을 쉽게할 수 있습니다. nsICryptoHash 인스턴스를 생성하고 파일을 입력 스트림으로 열고 파일의 자료로 해쉬를 갱신하길 원할 겁니다. 아래의 예제가 파일 MD5 해쉬 연산을 어떻게 하는지 보여줍니다.

- -
// hardcoded here for convenience
-var path = "c:\\windows\\notepad.exe";
-var f = Components.classes["@mozilla.org/file/local;1"]
-                  .createInstance(Components.interfaces.nsILocalFile);
-f.initWithPath(path);
-var istream = Components.classes["@mozilla.org/network/file-input-stream;1"]
-                        .createInstance(Components.interfaces.nsIFileInputStream);
-// open for reading
-istream.init(f, 0x01, 0444, 0);
-var ch = Components.classes["@mozilla.org/security/hash;1"]
-                   .createInstance(Components.interfaces.nsICryptoHash);
-// we want to use the MD5 algorithm
-ch.init(ch.MD5);
-// this tells updateFromStream to read the entire file
-const PR_UINT32_MAX = 0xffffffff;
-ch.updateFromStream(istream, PR_UINT32_MAX);
-// pass false here to get binary data back
-var hash = ch.finish(false);
-
-// return the two-digit hexadecimal code for a byte
-function toHexString(charCode)
-{
-  return ("0" + charCode.toString(16)).slice(-2);
-}
-
-// convert the binary hash data to a hex string.
-var s = Array.from(hash, (c, i) => toHexString(hash.charCodeAt(i))).join("");
-// s now contains your hash in hex
-
- -

내 윈도우즈 XP SP2 시스템에서 해쉬 값으로 5eb63bbbe01eeed093cb22bb8f5acdc3를 주었지만 여러분의 경우는 수가 다를 수 있습니다. 이 간단한 예제는 인터페이스의 기능을 대부분 보여줍니다.

- -

첫번째로 주목할 부분은 init() 메서드를 호출할 때 해쉬 알고리즘을 결정하는 것입니다. 가능한 모든 올고리즘은 인터페이스의 상수에 규정되어 있습니다.

- -

또 주목할 곳은 updateFromStream() 메서드를 호출할 때 두번째 패러미터가 읽어들일 바이트 수라는 것입니다. 여기에 PR_UINT32_MAX를 보내면 전체 파일을 읽길 원한다고 지시하는 겁니다.

- -

마지막으로 finish() 메서드 호출이 해쉬 값을 생성하는 것입니다. 예제처럼 첫번째 패러미터가 false이면 이진 값을 반환합니다. true를 보내면 해쉬 값은 base 64 인코딩된 문자열로 옵니다. 이 예제에서 해쉬 프로그램에 의해 이진 자료를 입력하고 그 결과로 기본 출력인 16진 문자열을 얻습니다.

- -

문자열 해쉬 연산하기

- -

또다른 기본 연산은 문자열 해쉬 값을 연산하는 것입니다. 해쉬 함수가 여러 바이트를 연산하기 때문에 먼저 문자열을 nsIScriptableUnicodeConverter를 사용하여 바이트의 순열로 바꾸고 원하는 유니코드 인코딩으로 바꿔야 합니다.

- -
주의: 다른 인코딩은 다른 해쉬 값을 만듭니다! 결과 값을 비교할려면 항상 같은 인코딩을 사용해야 합니다.
- -

아래의 예제는 문자열을 UTF-8 인코딩의 바이트로 바꾸고 MD5 해쉬 값을 계산하는 방법을 보여줍니다. 결과 값은 이전 예제 처럼 16진 문자열입니다.

- -
var str = "hello world";
-var converter =
-  Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].
-    createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
-
-// we use UTF-8 here, you can choose other encodings.
-converter.charset = "UTF-8";
-// result is an out parameter,
-// result.value will contain the array length
-var result = {};
-// data is an array of bytes
-var data = converter.convertToByteArray(str, result);
-var ch = Components.classes["@mozilla.org/security/hash;1"]
-                   .createInstance(Components.interfaces.nsICryptoHash);
-ch.init(ch.MD5);
-ch.update(data, data.length);
-var hash = ch.finish(false);
-
-// return the two-digit hexadecimal code for a byte
-function toHexString(charCode)
-{
-  return ("0" + charCode.toString(16)).slice(-2);
-}
-
-// convert the binary hash data to a hex string.
-var s = Array.from(hash, (c, i) => toHexString(hash.charCodeAt(i))).join("");
-// s now contains your hash in hex: should be
-// 5eb63bbbe01eeed093cb22bb8f5acdc3
-
- -

이 예제에서 해쉬 배열을 보내기 위해 update() 메서드를 씁니다. 이전 예제처럼 이진 결과를 16진 문자열로 변경했습니다.

- -

-- cgit v1.2.3-54-g00ecf