Snippets

Leonid Kozarin Laboratory works on Information Security

Created by Leonid Kozarin last modified
import java.lang.Math
import java.util.Random


fun main(args: Array<String>) {
    val P = 0.0001
    val V = 100.0 / (24 * 60)   // 100 passwords/day -> V passwords/minute
    val T = 12                  // 12 days
    val Smin = (V * T / P).ceil()
    
    val alphabet = ('0'..'9').joinToString("") +
            ('a'..'z').joinToString("") +
            ('A'..'Z').joinToString("") +
            "!@#$%&"
    val A = alphabet.length
    
    val Lmin = logn(A.toDouble(), Smin).ceil().toInt()
    
    println("Lmin: $Lmin")

    val rand = Random()
    val password = generateSequence { rand.nextInt(A-1) }
            .take(Lmin)
            .map { alphabet[it] }
            .joinToString("")

    println("Password: $password")
}


fun logn(n: Double, x: Double) = Math.log(x) / Math.log(n)

fun <T : Number> T.ceil() = Math.ceil(this.toDouble())
#!/usr/bin/env python3
import random
import sys
from typing import List


# UTILITY GENERATORS

def __generate_several(count: int, func: callable) -> list:
    return [f() for f in [func] * count]


def __generate_random_numbers(count: int) -> List[int]:
    return __generate_several(count, lambda: random.randrange(10))


def __generate_random_small_letters(count: int) -> List[str]:
    return [chr(n) for n in __generate_several(count, lambda: random.randint(97, 122))]


def __generate_random_capital_letters(count: int) -> List[str]:
    return [chr(n) for n in __generate_several(count, lambda: random.randint(65, 90))]


# GENERATOR

def _generate_password(name: str) -> List[str]:
    """:param name: the name of a user
    :returns: a random **password** for the given name as a list of characters
    """

    q = len(name) % 6
    b12 = __generate_random_capital_letters(2)
    b_middle = __generate_random_small_letters(10 - q - 3)
    b_ending = __generate_random_numbers(10 - (10 - q) + 1)
    return b12 + b_middle + b_ending


# PUBLIC API

def gen_password(name: str) -> str:
    """:param name: the name of a user
    :returns: a random **password**
    """

    password = [str(x) for x in _generate_password(name)]
    return "".join(password)


# TESTING STUFF

def _print_password(name: str) -> None:
    print(gen_password(name))


def __print_test_suite() -> None:
    for n in ['Леонид', 'Настя', 'Юра']:
        print(n)
        print("n=%d, q=%d" % (len(n), len(n) % 6))
        for n_ in [n] * 5:
            _print_password(n_)
        print()


# ENTRY POINT

if __name__ == '__main__':
    if len(sys.argv) > 1:
        if sys.argv[1] == "--test":
            __print_test_suite()
        else:
            _print_password(sys.argv[1])
    else:
        _print_password(input("Введите Ваше имя: "))
import sys
import math


def get_alphabet(text: str) -> set:
    return set(text)

def get_permutations_count(text: str) -> int:
    m = len(get_alphabet(text))
    n = len(text)
    return math.factorial(m**n)


if __name__ == "__main__" and len(sys.argv) > 1:
    print(get_permutations_count(sys.argv[1]))

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.