2022/02/22

SalesforceにおけるMD5アルゴリズムでのハッシュ化の方法と使用例を解説

 
  

Salesforceにおけるハッシュ化とは?

SalesforceではMD5アルゴリズムを用いたハッシュ化が可能です。 Salesforceでは文字列、日付や時間、数値、パーセントなど、複数のデータ型を使用できます。その中でも文字列を取り扱う場合には、文字列の内容を容易に読み取れなくする変換が要求される場合があり、その変換をハッシュ化や暗号化と言います。 この内のハッシュ化とは任意のデータの不可逆変換を指し、Salesforceではハッシュ化のための関数が用意されています。 ここではハッシュ化の中でも、MD5アルゴリズムを用いたハッシュ化の概要や方法などについて見ていきましょう。ハッシュ化と混同されやすい暗号化との違いについても触れていきます。

SalesforceにおけるMD5アルゴリズムでのハッシュ化方法

MD5アルゴリズムでハッシュ化するには、ハッシュ化のための関数を用いる必要があります。 Salseforceにおけるハッシュ化には、MD5関数やApexでのCryptoクラスを用いる方法があります。 ここではMD5関数、および、Cryptoクラスのハッシュ化メソッドであるgenerateDigestメソッドの構文と、その使用例を解説します。複数の使用例を元に、各ケースにおける使用方法を見ていきます。また、ハッシュ化と混同されやすい暗号化との違いについても解説します。

ハッシュ化と暗号化

ハッシュ化は不可逆変換、暗号化は秘匿変換を意味します。 ハッシュ化は復号を前提としない一方向のみの不可逆変換で、ハッシュ化された値(ハッシュ値)から元の文字列を推測することは困難です。そのため、元の文字列の内容は問わずに、元の文字列と内容が一致するかどうかを検証したい場合に用いられます。 例えばパスワードの一致性や、転送したファイルの一致性、圧縮データの一致性など、一致性の検証に用いられています。 一方、暗号化は復号を前提とした秘匿変換で、鍵と呼ばれるデータを元に、暗号化された文字列を元の文字列に復号できます。そのため、鍵を持っている場合に限り元の文字列の内容が分かるような処理に用いられます。 例えば機密情報の保護や、メールの内容の保護など、秘匿性の確保に用いられています。 ハッシュ化も暗号化も元の文字列が何か容易に分からないように変換しますが、それぞれ目的が異なる変換ですので、混同しないように覚えておきましょう。

MD5関数を用いたハッシュ化

MD5関数は所定の構文に従って使用する必要があります。 ここではMD5関数の使用方法として、その構文と使用例を解説します。複数の使用例を元に、各ケースにおける使用方法を見ていきましょう。 MD5関数の構文 MD5関数は下記構文に従い使用します。 MD5関数を使用する際は、引数にはハッシュ化したい任意の文字列と、エンコードに用いる文字セットを与えます。
MD5(srcText, charSet)
引数srcTextにはハッシュ化したい文字列として、リテラル値やAPI参照名、数式等を与えます。引数charSetには、エンコードのための文字セットを文字列で与えます。文字セットは’UTC-8’もしくは’UTC-16’のいずれかを指定できます。 尚、charSetは省略も可能で、省略した場合は’UTC-8’が採用されます。

MD5関数の使用例

MD5関数は以下のように使用します。 具体的な使用例は以下の通りです。
MD5('This is sample text.')
引数に与えられた文字列を、MD5アルゴリズムを用いてハッシュ化し、そのハッシュ値を返します。
MD5('This is also sample text.', 'UTC-16')
引数に与えられた文字列を、MD5アルゴリズムを用いてUTF-16エンコードでハッシュ化し、そのハッシュ値を返します。

Cryptoクラスを用いたハッシュ化

ApexではCryptoクラスのgenerateDigestメソッドを用いてハッシュ化します。 ここではApexにおけるハッシュ化の方法を解説します。 Apexでのハッシュ化ではCryptoクラスのgenerateDigestメソッドを用いますので、generateDigestメソッドの使用方法として、その構文と使用例を解説します。複数の使用例を元に、各ケースにおける使用方法を見ていきましょう。

generateDigestメソッドの構文

generateDigestメソッドは下記構文に従い使用します。 generateDigestメソッドを使用する際は、引数にはハッシュ化アルゴリズムと、ハッシュ化したい任意の文字列を与えます。尚、ハッシュ化したい任意の文字列は、StringクラスではなくBlobクラスとして与えなくてはいけないので注意が必要です。
generateDigest(hashAlgorithm, srcData)
引数hashAlgorithmにはハッシュ化アルゴリズムをStringクラスの文字列で与えます。MD5アルゴリズムでハッシュ化したい場合は’MD5’を与えます。他のアルゴリズムとしては、’SHA1’、’SHA3-256’、’SHA3-384’、’SHA3-512’、’SHA-256’、’SHA-512’を与えられます。 引数srcDataには、ハッシュ化したいStringクラスの文字列をBlobクラスのデータとして与えます。Stringクラスの文字列をBlobクラスのデータに変換するには、BlobクラスのvalueOfメソッドを使用します。 generateDigestメソッドの使用例 generateDigestメソッドは以下のように使用します。 具体的な使用例は以下の通りです。
Blob srcData = Blob.valueOf('This is sample text.');
Blob resultHash = Crypto.generateDigest('MD5', srcData);
1行目でハッシュ化したい文字列をBlobクラスのデータに変換しています。変換するにはvalueOfメソッドの引数にハッシュ化したい文字列を与えます。 2行目でハッシュ化しています。ハッシュ化に用いるアルゴリズムは、generateDigestの第一引数に与えられた文字列に対応するアルゴリズムです。この例ではMD5アルゴリズムを指定しています。第二引数には1行目でBlobクラスに変換したsrcDataを指定します。 Blobクラスについて BlobクラスはBlobプリミティブデータ型のメソッドを含むクラスです。 BlobクラスはBlobプリミティブデータ型のメソッドを含むクラスで、Blobプリミティブデータ型は単一のオブジェクトとして表されるバイナリデータです。 BlobクラスのvalueOfメソッドではStringクラスの文字列からBlobクラスへの変換が、BlobクラスのtoStringメソッドではBlobクラスのデータからStringクラスの文字列への変換が可能です。

MD5アルゴリズムでのハッシュ化を活用しよう!

今回は、SalesforceにおけるMD5アルゴリズムでのハッシュ化について解説しました。 いくつかの使用例を元に、MD5関数やgenerateDigestメソッドの使い方を見てきました。これらの例を見ると、Salesforceでは単純な構文でハッシュ化できることが分かります。 ハッシュ化はデータの一致性を検証する際に利用頻度の高い手法です。MD5アルゴリズムに限らず他のハッシュ化アルゴリズムを用いる場合でも、今回解説した方法を活用したハッシュ化が可能なので、是非活用できるようにしておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】