@@ -8,19 +8,30 @@ alphabets = {
88 alpha : "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ,
99 numeric : "1234567890" ,
1010 alphanumeric : "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" ,
11- asciisymbols : "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?"
11+ asciisymbols : "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?" ,
12+ greek : "ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΛλΜμΝνΞξΟοΠπΡρΣσςΤτΥυΦφΧχΨψΩω" ,
13+ runes : "ᚠᚢᚦᚩᚱᚳᚷᚹᚻᚾᛁᛄᛇᛈᛉᛋᛏᛒᛖᛗᛚᛝᛟᛞᚪᚫᚣᛡᛠ" ,
14+ armenian : "ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆև" ,
15+ cyrillic_slavic : "АА̀А̂А̄ӐӒБВГҐДЂЃЕЀЕ̂Е̄ЁЄЄ́ЖЗЗ́ЅИІІ́ЇꙆЍИ̂ӢЙӤЈКЛЉМНЊОО̀О̂О̄ӦПРСС́ТЋЌУУ̀У̂ӮЎӰФХЦЧЏШЩꙎЪЪ̀ЫЬѢЭЮЮ̀ЯЯ̀ʼˮ" ,
16+ cyrillic_nonslavic : "А̊А̃Ӓ̄ӔӘӘ́Ә̃ӚВ̌ԜГ̑Г̇Г̣Г̌Г̂Г̆Г̈Г̊ҔҒӺҒ̌Ғ̊ӶГ̡Д́Д̌Д̈Д̣Д̆ӖЕ̃Ё̄Є̈ԐԐ̈ҖӜӁЖ̣ҘӞЗ̌З̣З̆ӠИ̃ҊҚӃҠҞҜК̣К̊Қ̊ԚᴫЛ́ӅԮԒЛ̈ӍᵸН́ӉҢԨӇҤО̆О̃Ӧ̄ӨӨ̄Ө́Ө̆ӪԤП̈Р̌ҎС̌ҪС̣С̱Т́Т̈Т̌Т̇Т̣ҬУ̃ӲУ̊Ӱ̄ҰҮҮ́Х̣Х̱Х̮Х̑Х̌ҲӼХ̊ӾӾ̊ҺҺ̈ԦЦ̌Ц̈ҴҶҶ̣ӴӋҸЧ̇Ч̣ҼҾШ̣ꚜЫ̆Ы̄ӸꚝҌҨЭ̆Э̄Э̇ӬӬ́Ӭ̄Ю̆Ю̈Ю̄Я̆Я̄Я̈Ӏ" ,
17+ cyrillic_archaic : "А̨Б̀Б̣Б̱В̀Г̀Г̧Г̄Г̓Г̆Ҕ̀Ҕ̆ԀД̓Д̀Д̨ԂꚀꙢЕ̇Е̨Ж̀Ж̑ꙂꙄЏ̆ꚄꚄ̆ꙀЗ̀З̑ԄԆꚈԪꚂꚔІ̂І̣І̨Ј̵Ј̃ꙈК̓К̀К̆Ӄ̆К̑К̇К̈К̄ԞК̂Л̀ԠꙤԈЛ̑Л̇ԔМ̀М̃ꙦН̀Н̄Н̧Н̃ԊԢН̡ѺꙨꙪꙬꙮꚘꚚП̓П̀П́ҦП̧П̑ҀԚ̆Р́Р̀Р̃ԖС̀С̈ԌҪ̓Т̓Т̀ԎТ̑ꚊТ̧ꚌꚌ̆ѸꙊУ̇У̨ꙋ́Ф̑Ф̓Х́Х̀Х̆Х̇Х̧Х̾Х̓һ̱ѠꙌѼѾꙠЦ̀Ц́Ц̓ꚎꚎ̆ꚐЧ́Ч̀Ч̆Ч̑Ч̓ԬꚒꚆꚆ̆Ҽ̆Ш̀Ш̆Ш̑Щ̆ꚖꚖ̆Ъ̄Ъ̈Ъ̈̄ꙐЫ̂Ы̃Ѣ́Ѣ̈Ѣ̆ꙒЭ̨Э̂ꙔЮ̂ꙖЯ̈Я̂Я̨ԘѤѦꙘѪꙚѨꙜѬѮѰѲѴѶꙞ" ,
18+ hebrew : "אבבגגדדהוזחטיככךךלמםנןסעפפףףצץקרששתת" ,
19+ katakana : "アイウエオカキクケコガギグゲゴサシスセソザジズゼゾタチツテトダヂヅデドナニヌネノハヒフヘホバビブベボパピプペポマミムメモヤユヨラリルレロワヰヱヲ"
20+ // gothic: "𐌰𐌱𐌲𐌳𐌴𐌵𐌶𐌷𐌸𐌹𐌺𐌻𐌼𐌽𐌾𐌿𐍀𐍁𐍂𐍃𐍄𐍅𐍆𐍇𐍈𐍉𐍊",
1221} ;
22+ Object . keys ( alphabets ) . forEach ( key => alphabets [ key ] = unique ( alphabets [ key ] ) ) ;
23+ alphabets . cyrillic = unique ( alphabets . cyrillic_slavic + alphabets . cyrillic_nonslavic + alphabets . cyrillic_archaic ) ;
24+ alphabets . regular = unique ( alphabets . alphalower + alphabets . alphaupper + alphabets . numeric + alphabets . asciisymbols ) ;
1325alphabets . all = unique ( Object . keys ( alphabets ) . map ( key => alphabets [ key ] ) . join ( '' ) ) ;
1426
15- function generate ( length , alphabet ) {
16- let pass = '' ;
17- for ( let i = 0 ; i < length ; i ++ ) {
18- // naive version :
19- // pass += alphabet[parseInt(Math.random() * alphabet.length)] ;
20- // cryptographically secure rng :
21- pass += alphabet [ parseInt ( crypto . getRandomValues ( new Uint32Array ( 1 ) ) [ 0 ] / 0xFFFFFFFF * alphabet . length ) ] ;
27+ function generate ( length , alphabet , method = 'crypto' ) {
28+ switch ( method ) {
29+ case 'crypto' :
30+ default :
31+ return crypto . getRandomValues ( new Uint32Array ( length ) ) . reduce ( ( acc , val ) => acc + alphabet [ val / 0xFFFFFFFF * alphabet . length | 0 ] , '' ) ;
32+ case 'simple' :
33+ return new Array ( length ) . fill ( 0 ) . map ( ( ) => alphabet [ parseInt ( Math . random ( ) * alphabet . length ) ] ) . join ( '' ) ;
2234 }
23- return pass ;
2435}
2536
26- console . log ( generate ( 32 , alphabets . all ) ) ;
37+ console . log ( generate ( 32 , alphabets . regular ) ) ;
0 commit comments