Archive for the 'SerialKeyGenerator' Category

2015/10/24 シリアルコードの生成と検証

オープンソースのSerialKeyGeneratorをもとに作成した「serialKeyGenKit」フレームワークを用いて、シリアルコードの生成(Generation)と検証(Validation)を行うAppleScriptです。

ソフトウェアの販売時などに、シリアルコードを発行することがあります。Mac App Storeのソフトウェア販売ではあまり見られませんが(自社ストア販売バージョンからMac App Store販売バージョンへのアップグレードでOmniGraffleあたりで見かけました)、Mac App Store以外でオンライン販売するような場合には必要になってきます。

キーの重複がなく、偽造されにくく、必要な情報を含んでいるようなシリアルコード体系が理想的です。しかも、使用する文字はA〜Z、0〜9の文字だけで、「XXXXX-XXXXX-XXXXX-XXXXX-XXXXX」のフォーマットで・・・・

そんなシリアルコードを手軽かつ高速に生成できるのがSerialKeyGeneratorです。シークレットキーをもとに乱数要素や日時の要素を勘案したシリアルコードを生成してくれます。

仕事で何度かシリアルコードの作成を行ったことがありますが、なかなかこれが大変でした。「SerialKeyGenerator」は非常に簡単なシリアルコードを生成するためのものですが、シリアルコードによって動作許可する機能を作ったり、指定日時まで動作許可するコードだったりと・・・それだけで相当の手間になりました。

また、流失したシリアルコードについてはオンラインで失効手続きを行えるようにしたりと、本気で作り出すと「ソフトウェア本体よりもでかい処理」になったりします(頭痛が、、、)。

例によって、serialKeyGenKit.frameworkをOS X 10.10以降用にビルドしておきましたので、興味のある方は~/Library/Frameworksフォルダに入れてお試しください。

–> Download Framework Binary

AppleScript名:SerialKeyGeneratorサンプル1
– Created 2015-10-24 18:27:16 +0900 by Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “serialKeyGenKit” –danielvy/SerialKeyGenerator
–https://github.com/danielvy/SerialKeyGenerator

set aGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:“Piyomaru”
–>  (SerialKeyGenerator)

set aList to {}
repeat with i from 1 to 10
  set aRes to (aGen’s generateSerialWithSequence:i |data|:10)
  
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”}

★Click Here to Open This Script 

AppleScript名:SerialKeyGeneratorサンプル2
– Created 2015-10-24 18:27:16 +0900 by Takaaki Naganoya
– 2015 Piyomaru Software
use AppleScript version “2.4″
use scripting additions
use framework “Foundation”
use framework “serialKeyGenKit” –danielvy/SerialKeyGenerator
–https://github.com/danielvy/SerialKeyGenerator

–シリアルコードの生成(エンコード)

–シークレットキー「Piyomaru」をもとにシリアルコードジェネレータを生成
set aGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:“Piyomaru”
–>  (SerialKeyGenerator)

–指定個数のシリアルコードを生成。生成するたびに毎回シリアルコードは異なる
set anArray to (aGen’s generateSerials:10 start:1 |data|:10) as list
–>  {”0YR0Q-Y5FZP-A25EI-TK3YI-78L5U”, “7VZSX-S87LJ-812L7-A2XC6-Q9DBQ”, “C3HYG-H4HPP-FPP6A-1PH1L-MVVF0″, “B7FHO-AQ4E0-Y0AQG-YYFVX-XSEWA”, “0C4GP-M46PY-BD7J9-878SG-FSZP3″, “5OLK7-C3R3R-IVKX5-7FUIT-GJA07″, “2KA8T-PFIC4-PII60-QBRWN-ZPJWE”, “325M7-8KR60-2X1G8-EF7OA-UP06I”, “CIH21-H6H1O-31AA4-12ZSD-0ZBT3″, “8NA54-0W8R5-0VI34-X1L5F-5E0GS”}

–シリアルコードの検証(デコード)

–シークレットキー「Piyomaru」をもとにシリアルコードジェネレータを生成
set bGen to current application’s SerialKeyGenerator’s alloc()’s initWithSecret:“Piyomaru”

set bRes to bGen’s decodeSerial:(contents of first item of anArray)

set aDate to bRes’s |date| as date
–>  date “2015年10月24日土曜日 18:37:25″
set aSeq to bRes’s sequence as integer
–>  1
set aData to bRes’s |data| as integer
–>  10

★Click Here to Open This Script