--- title: "Hash Filter の開発" slug: "filesafer-programming-hash" tags: ["api", "File Safer"] updated: 2026-09-17T09:28:45Z published: 2026-09-17T09:28:45Z canonical: "guide.ncloud-docs.com/filesafer-programming-hash" stale: true --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Hash Filter の開発 Classic/VPC環境で利用できます。 Hash Filter REST APIを使用して Hash Filterコードを作成する方法を説明します。 参考 Hash Filter開発の先に、File Saferご利用の申し込み、API Gatewayご利用の申し込みと API Keyを作成する必要があります。詳細は、[File Safer を開始する](/docs/ja/filesafer-start)をご参照ください。 ## Hash Filter実現のシナリオ ユーザーがアップロード/ダウンロードするファイルに対する Hash Filter適用シナリオは、次の通りです。 [1.マルウェアが疑われるファイルを区分](/docs/ja/filesafer-programming-hash#1%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C%EB%A1%9C%EC%9D%98%EC%8B%AC%EB%90%98%EB%8A%94%ED%8C%8C%EC%9D%BC%EC%9D%84%EA%B5%AC%EB%B6%84) [2.区分されたファイルから Hash値を抽出](/docs/ja/filesafer-programming-hash#2%EA%B5%AC%EB%B6%84%EB%90%9C%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9CHash%EA%B0%92%EC%B6%94%EC%B6%9C) [3.認証値作成](/docs/ja/filesafer-programming-hash#3%EC%9D%B8%EC%A6%9D%EA%B0%92%EC%83%9D%EC%84%B1) [4.リクエストパラメータ追加](/docs/ja/filesafer-programming-hash#4%EC%9A%94%EC%B2%AD%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0%EC%B6%94%EA%B0%80) [5.APIリクエスト](/docs/ja/filesafer-programming-hash#5API%EC%9A%94%EC%B2%AD) [6.レスポンス値確認とブロック有無を判断](/docs/ja/filesafer-programming-hash#6%EC%9D%91%EB%8B%B5%EA%B0%92%ED%99%95%EC%9D%B8%EB%B0%8F%EC%B0%A8%EB%8B%A8%EC%97%AC%EB%B6%80%ED%8C%90%EB%8B%A8) ## Hash Filterコード作成 [Hash Filter の実装シナリオ](/docs/ja/filesafer-programming-hash#HashFilter%EA%B5%AC%ED%98%84%EC%8B%9C%EB%82%98%EB%A6%AC%EC%98%A4)に従ってコードを作成します。 ### 1.マルウェアが疑われるファイルを区分 アップロード/ダウンロードされるファイルの中から、マルウェアスキャンが必要なファイルを区分します。 ### 2.区分されたファイルから Hash値を抽出 ファイルから Hash値を抽出します。以下は、Hash値を抽出する JAVAのサンプルコードです。 参考 Hashタイプ別の Hash値の表記フォームは、次の通りです。 - SHA-1: 16進数40byte文字列で表記 例) 3ec625cb2277d7334406ab712b69c4ceaf38bd82 - MD5: 16進数32byte文字列で表記 例) 8072fd6da170738c905cf362f787442b ``` public static String getHash(String filename, String algorithm) throws Exception { MessageDigest md = MessageDigest.getInstance(algorithm); // file hashing with DigestInputStream DigestInputStream dis = new DigestInputStream(new FileInputStream(new File(filename)), md); // empty loop to clear the data while(dis.read() != -1); dis.close(); // Get the hash's bytes byte[] hashBytes = md.digest(); // bytes to hex StringBuffer sb = new StringBuffer(); for(byte h : hashBytes) { sb.append(String.format("%02x", h)); } return sb.toString(); } public static void main(String[] args) { try { // Get hash value of a file with SHA-1 Algorithm String sha1 = getHash("./test.exe", "sha-1"); // Get hash value of a file MD5 Algorithm String md5 = getHash("./test.exe", "md5"); } catch (Exception e) { e.printStackTrace(); } } ``` ### 3.認証値作成 NAVERクラウドプラットフォーム API使用認証に必要な IAM認証値を作成します。認証に必要なヘッダは次の通りです。 - `x-ncp-iam-access-key`: コンソールの **My Account** > **アカウントとセキュリティ管理** > **セキュリティ管理** > **アクセス管理**メニューから Access Keyを発行 - `x-ncp-apigw-signature-v2`: Access Keyとマッピングされる Secret Keyを HmacSHA256暗号化し、signature値を作成(改行文字は \nを使用) - `x-ncp-apigw-api-key`: API Gatewayで API Keyを発行 - `x-ncp-apigw-timestamp`: 認証値ではないがリクエストヘッダに含まれる。API明細を参照 参考 signature値を作成する方法とサンプルコードは、[NAVERクラウドプラットフォーム APIガイド > API の概要 > 基本 API > Ncloud API > 2.ヘッダ作成](https://api.ncloud-docs.com/docs/ja/common-ncpapi)をご参照ください。 ### 4.リクエストパラメータ追加 Hash Filter APIリクエストパラメータ値を追加します。リクエストパラメータは次の通りです。 - hashCode: Hash値を文字列に追加 - hashType: Hash値のアルゴリズムを表記(MD5または SHA-1) 以下は、作成されたパラメータの例です。 ``` hashCode=00010efc49b7174d18400710eed1642a7d4b12db&hashType=sha1 ``` 参考 Hash Filter REST APIの明細は、[checkHash(Hash Filter)](https://api.ncloud-docs.com/docs/ja/security-filesafer-checkhash)をご参照ください。 ### 5.APIリクエスト 上記の3番と4番の手続きで作成したヘッダとパラメータを使用し、 Hash Filter URIにリクエストします。以下は、Hash Filter APIリクエストのサンプルコードです。 ``` public static void main(String[] args) throws Exception { String accessKey = "ACCESS_KEY"; // access key (from portal or sub account) String apikey = API_GATEWAY_KEY; String apiDomain = "https://filesafer.apigw.ntruss.com"; String method = "GET"; long timestamp = System.currentTimeMillis(); // step 2, 3: Extract hash vlaue of a identified file then add parameter value including hash value and hash type String param = "hashCode=" + getHash("./test.exe") + "&hashType=sha1"; // The apiURL is the value obtained by appending parameter to the end of URI string provided by Hash Filter. String apiURL = "/hashfilter/v1/checkHash?" + param; // step 4: Create authentication value String signature = makeSignature(method, apiURL, timestamp); // step 5: Request API URL url = new URL(apiDomain + apiURL); HttpURLConnection con = (HttpURLConnection)url.openConnection(); con.setRequestMethod(method); con.setRequestProperty("x-ncp-apigw-timestamp", Long.toString(timestamp)); con.setRequestProperty("x-ncp-iam-access-key", accessKey); con.setRequestProperty("x-ncp-apigw-signature-v2", signature); con.setRequestProperty("x-ncp-apigw-api-key", apikey); con.setRequestProperty("accept", "application/json"); // step 6: Check the response value and determine whether to block int httpResponseCode = con.getResponseCode(); BufferedReader br = null; if (httpResponseCode == 200) { br = new BufferedReader(new InputStreamReader(con.getInputStream())); String readLine; StringBuffer httpResponse = new StringBuffer(); while((readLine = br.readLine())! = null) { httpResponse.append(readLine); } // Do next step (ex, determine whether to block) ... br.close(); } } ``` 参考 jdk20以上の使用時、URLメソッドの代わりに URIメソッドを使用できます。 ### 6.レスポンス値確認とブロック有無を判断 API呼び出しレスポンス値の`hashCheckResultList`の`object`値を確認し、マルウェアの有無を判断してファイルを処理します。 `hashCheckResultList`に`object`がある場合はマルウェアが検知されたことを意味し、そうでない場合はマルウェアがないことを意味します。