オープンソースのフレームワーク「SerialKeyGenerator」を用いてシリアルコードを生成、検証するAppleScriptです。
シリアルコードについて
シリアルコードは、日本では「レジストコード」「プロダクトコード」などと呼ばれるもので、ソフトウェアの販売時にこのコードを発行し、ソフトウェアのシリアルコード入力ダイアログに入力してもらうことで、完全版として機能させるというものです。
Mac App StoreではApple IDとひもづけることでシリアルコードを使用しないソフトウェア販売とライセンシングを行なっていますが、Mac App Store外で販売する場合にはシリアルコードのことを考える必要が出てきます。
コードの文字数を増やすと、仮にキーボードから入力する場合の難易度が上がってしまいます。適度な長さの文字列になることが望ましいところです。
シリアルコードが仮に流出した場合に備え、どの購入者のコードが流出したかを特定する必要があります。そのため、シリアルコードにはその名のとおり、購入者の番号を含めてあるのが普通です。
SerialKeyGeneratorの使い方について
SerialKeyGeneratorでは、シークレットキーワード、ユーザー番号をもとにシリアルコードが生成されます。日時を考慮してシリアルコードを計算するため、同じシリアルコードを生成させても日時が変われば結果は異なります。
ただ、おおもとのシークレットキーワードが判明してしまうと、第三者がシリアルコードを勝手に発行してソフトウェアの不正使用ができてしまうため、アプリケーション内に格納するシークレットキーワードは文字ダンプされても判明しないようにしておくのが普通です。
–> Download serialKeyGenKit.framework(To ~/Library/Frameworks/)
AppleScript名:SerialKeyGeneratorサンプル1 |
— Created 2015-10-24 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "serialKeyGenKit" –https://github.com/danielvy/SerialKeyGenerator –Generate Serial Code with secret Keyword set aGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:"Piyomaru" –> (SerialKeyGenerator) <SerialKeyGenerator: 0x7f8b5b5fa200> set aList to {} repeat with i from 1 to 10 set aRes to (aGen’s generateSerialWithSequence:i |data|:i) set the end of aList to (aRes as text) end repeat aList –> {"1CHH8-BJY89-TR9Z9-AKSTL-70JZF", "4KXCF-LS6P5-7BKYN-CUMPY-NM072", "41GO2-OGZ3T-83YP9-2LS4J-9W3MI", "CA3WV-C7FU7-PSPJ3-LNGT7-N6AJT", "3OG0B-MCFUM-7YKHT-EE533-LNJEJ", "4SKWQ-9G8XE-ZCE6K-APSAL-R0T8S", "CTEZT-H4AQQ-BM15H-FH2DG-P7K7O", "4BZ1X-2OHKF-5FWND-7SZVA-EBR89", "BDKRI-9JU7T-G6N20-YPU9K-6FXQW", "9EWW5-O3FMV-SDEZA-77JZE-OY8FL"} –Decode Serial with secret Keyword set rList to {} set bGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:"Piyomaru" –> (SerialKeyGenerator) <SerialKeyGenerator: 0x7fb6992b8400> repeat with i in aList set bRes to (bGen’s decodeSerial:(contents of i)) set aDate to bRes’s |date| as date set aSeq to bRes’s sequence as integer set aData to bRes’s |data| as integer set the end of rList to {aData, aSeq, aDate} end repeat return rList –> {{1, 1, date "2018年11月3日土曜日 16:44:57"}, {2, 2, date "2018年11月3日土曜日 16:44:57"}, {3, 3, date "2018年11月3日土曜日 16:44:57"}, {4, 4, date "2018年11月3日土曜日 16:44:57"}, {5, 5, date "2018年11月3日土曜日 16:44:57"}, {6, 6, date "2018年11月3日土曜日 16:44:57"}, {7, 7, date "2018年11月3日土曜日 16:44:57"}, {8, 8, date "2018年11月3日土曜日 16:44:57"}, {9, 9, date "2018年11月3日土曜日 16:44:57"}, {10, 10, date "2018年11月3日土曜日 16:44:57"}} |