MAKING PAPER CRYPTOGRAPHY TOOLSをSplunkで
MAKING PAPER CRYPTOGRAPHY TOOLS
をみていて、紙じゃなくてSplunkでやってみようと思って作りました。
Splunk Answersで直前に文字列Shiftをいろいろとやっていたせいもあります。
code
cipher_wheel.xml
<form>
<label>cipher_wheel</label>
<search id="bases">
<query>| makeresults
| eval alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
| fields - _time
</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
<sampleRatio>1</sampleRatio>
</search>
<fieldset submitButton="false">
<input type="dropdown" token="from">
<label>初期値</label>
<fieldForLabel>label</fieldForLabel>
<fieldForValue>cypher</fieldForValue>
<search>
<query>| makeresults
| eval cypher="A"
| eval label=cypher</query>
</search>
</input>
<input type="dropdown" token="to">
<label>変換後</label>
<fieldForLabel>label</fieldForLabel>
<fieldForValue>alpha</fieldForValue>
<search base="bases">
<query>| eval alpha=split(alpha,"")
| mvexpand alpha
| eval label=alpha</query>
</search>
</input>
<input type="text" token="planeText">
<label>planeText</label>
</input>
<input type="text" token="cipherText">
<label>cipherText</label>
</input>
</fieldset>
<row>
<panel depends="$alwayshide$">
<table>
<search base="bases">
<done>
<set token="regex_decode">$result.regex1$</set>
<set token="regex_encode">$result.regex2$</set>
<set token="beta">$result.beta$</set>
</done>
<query>| eval to="$to$"
| eval beta=substr(substr(alpha,mvfind(split(alpha,""),to)+1).alpha,0,26)
| eval regex1="y/".beta."/".alpha."/"
| eval regex2="y/".alpha."/".beta."/"</query>
</search>
</table>
</panel>
</row>
<row>
<panel>
<table>
<title>cipher table</title>
<search>
<query>| makeresults
| eval beta="$beta$"
| eval alpha=split("ABCDEFGHIJKLMNOPQRSTUVWXYZ","")
| stats values(beta) as beta by alpha
| streamstats count
| eval beta=substr(beta,count,1)
| eval count = 1
| xyseries count alpha beta
| fields - count</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
</search>
<option name="drilldown">none</option>
</table>
</panel>
</row>
<row>
<panel>
<table>
<title>encode</title>
<search>
<query>| makeresults
| eval text="$planeText$"
| append [| makeresults
| eval text=upper("$planeText$")
| rex field=text mode=sed "$regex_encode$"]
| fields - _time</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
</search>
<option name="drilldown">none</option>
</table>
</panel>
<panel>
<table>
<title>decode</title>
<search>
<query>| makeresults
| eval text="$cipherText$"
| append [| makeresults
| eval text=upper("$cipherText$")
| rex field=text mode=sed "$regex_decode$"]
| fields - _time</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
</search>
<option name="drilldown">none</option>
</table>
</panel>
</row>
</form>
画面
cipher_wheel.xml
<form>
<label>cipher_wheel</label>
<search id="bases">
<query>| makeresults
| eval alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
| fields - _time
</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
<sampleRatio>1</sampleRatio>
</search>
<fieldset submitButton="false">
<input type="dropdown" token="from">
<label>初期値</label>
<fieldForLabel>label</fieldForLabel>
<fieldForValue>cypher</fieldForValue>
<search>
<query>| makeresults
| eval cypher="A"
| eval label=cypher</query>
</search>
</input>
<input type="dropdown" token="to">
<label>変換後</label>
<fieldForLabel>label</fieldForLabel>
<fieldForValue>alpha</fieldForValue>
<search base="bases">
<query>| eval alpha=split(alpha,"")
| mvexpand alpha
| eval label=alpha</query>
</search>
</input>
<input type="text" token="planeText">
<label>planeText</label>
</input>
<input type="text" token="cipherText">
<label>cipherText</label>
</input>
</fieldset>
<row>
<panel depends="$alwayshide$">
<table>
<search base="bases">
<done>
<set token="regex_decode">$result.regex1$</set>
<set token="regex_encode">$result.regex2$</set>
<set token="beta">$result.beta$</set>
</done>
<query>| eval to="$to$"
| eval beta=substr(substr(alpha,mvfind(split(alpha,""),to)+1).alpha,0,26)
| eval regex1="y/".beta."/".alpha."/"
| eval regex2="y/".alpha."/".beta."/"</query>
</search>
</table>
</panel>
</row>
<row>
<panel>
<table>
<title>cipher table</title>
<search>
<query>| makeresults
| eval beta="$beta$"
| eval alpha=split("ABCDEFGHIJKLMNOPQRSTUVWXYZ","")
| stats values(beta) as beta by alpha
| streamstats count
| eval beta=substr(beta,count,1)
| eval count = 1
| xyseries count alpha beta
| fields - count</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
</search>
<option name="drilldown">none</option>
</table>
</panel>
</row>
<row>
<panel>
<table>
<title>encode</title>
<search>
<query>| makeresults
| eval text="$planeText$"
| append [| makeresults
| eval text=upper("$planeText$")
| rex field=text mode=sed "$regex_encode$"]
| fields - _time</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
</search>
<option name="drilldown">none</option>
</table>
</panel>
<panel>
<table>
<title>decode</title>
<search>
<query>| makeresults
| eval text="$cipherText$"
| append [| makeresults
| eval text=upper("$cipherText$")
| rex field=text mode=sed "$regex_decode$"]
| fields - _time</query>
<earliest>-24h@h</earliest>
<latest>now</latest>
</search>
<option name="drilldown">none</option>
</table>
</panel>
</row>
</form>
解説
- Splunkだと文字をasciiコードに変換するコマンドがないので、表から引っ張ってきた方がはやいです。
-
eval tmp=printf("%c",65)
のように逆はある。
-
rex
のオプション mode=sed
のy//
は逐一文字を変換してもらえるので、この場合に最適
- 大文字小文字を考えていないので、
upper()
を使って全部大文字にしてしまっている。
- ダッシュボードのトークンで文字列を持っていくと、このように引数として使えるので便利
| rex field=text mode=sed "$regex_encode$"]
まとめ
-
eval tmp=printf("%c",65)
のように逆はある。
rex
のオプション mode=sed
のy//
は逐一文字を変換してもらえるので、この場合に最適
upper()
を使って全部大文字にしてしまっている。| rex field=text mode=sed "$regex_encode$"]
Splunkのダッシュボードでちょこっとした感じで作ってみました。
substr()
の引数が以外と忘れやすいです。0
から始まらないし。
cipherをcypherと書いていた名残が残っています
Author And Source
この問題について(MAKING PAPER CRYPTOGRAPHY TOOLSをSplunkで), 我々は、より多くの情報をここで見つけました https://qiita.com/toshikawa/items/2426c37f2721ac7946f5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .