javascript

小粒javascriptを置いています

TrueCrypt用パスワードの作成
平方根を求める(小数点以下切り捨て)
10桁未満の数の因数分解
大きい数字の数の因数分解

**********************************
javascriptでTrueCrypt用のパスワードを生成します

文字列を入力してください(日本語可、UTF-8に無い絵文字等は不可):


生成されたパスワード:



その他のオプション:
文字数
パスワードに使う文字の種類

このパスワードジェネレーターはあなたが入力した文字列から自動でパスワードを生成します。
パスワードは64文字です。
使われる文字は
「 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~」
の95種類です。(Truecryptで使えるのと同じ文字種です)

ちなみにこのJavaScriptはデフォルトでは
perl -Mbigint -MDigest::SHA=sha512_hex -le '(system "stty -echo"),chomp($n=<STDIN>),(system "stty echo");my $s=hex sha512_hex $n;print map{($s-=$n=$s%95)/=95;chr 32+$n}1..64'
に手打ちで入力した時と同じ文字列を返します。
JAVAではこうです。プロジェクトはUTF-8です。
import java.math.BigInteger;
import java.security.MessageDigest;

public static String makepass(String arg) throws Exception {
  MessageDigest md = MessageDigest.getInstance("SHA-512");
  md.update(arg.getBytes("UTF-8"));
  StringBuilder sb = new StringBuilder();
  for (byte b : md.digest())sb.append(String.format("%02x", b));
  BigInteger bi = new BigInteger(sb.toString() , 16);
  sb = new StringBuilder();
  String moji = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
  BigInteger mojisu = BigInteger.valueOf(moji.length());
  BigInteger index;
  for (int i=0;i<64;i++) {
    index = bi.remainder(mojisu);
    bi = bi.subtract(index).divide(mojisu);
    sb.append(moji.charAt(index.intValue()));
  }
  return sb.toString();
}
見てわかる通り、入力された文字列のハッシュをsha512で生成し、基数変換(逆順ですが)でパスワードにしています。安全安心です。
出てくる文字に偏りが現れることもなく、デタラメな文字を入力すればランダムなパスワードが生成できます。


ちなみにjavascriptのプログラムはGPLv2のライブラリを利用しています。詳しくはソースコードをご覧ください。





**********************************
平方根(小数点以下切り捨て)
入力即処理

ここに結果が表示されます

※小数点以下は切り捨てです。何桁の数字でもいけると思います。



**********************************
大きい数字の素因数分解


入力即処理

ここに結果が表示されます

※素因数の桁数が大きくなると遅くてちょっと使い物にならないですね
※具体的には、7桁以上の素数が2つ以上因数に含まれているとちょっとお手上げです
※具体的に言うと、86794489118567(9316343 * 9316369)みたいな数字でも54000ms程度と1分近くかかります。
※9007196099250001を因数分解しようとすると550154msかかりました。実に9分!
※まぁ、「2から9973までの素数をかけあわせた数字」とかなら110000ms程度、1267650600228229401496703205376 (2の100乗)とかなら数msで計算してくれるんですけどね。



素因数分解所要時間
・MacBook Air2011 1.6GHz上のChromeで9007196099250001:550154ms、86794489118567:54000ms、2656671804851:9500ms
・MacBook Pro2013 2.8GHz上のChromeで9007196099250001:201906ms、86794489118567:18782ms、2656671804851:3275ms
・Ryzen 7 3700X 3.6GHz上のChromeで9007196099250001:580347ms、86794489118567:56702ms、2656671804851:10099ms




0 件のコメント:

コメントを投稿