166 lines
6.9 KiB
HTML
166 lines
6.9 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Brute Password</title>
|
||
<link rel="icon" href="https://i.ibb.co/0ytfqw8/favicon.png" type="image/png"> <!-- Favicon link -->
|
||
<style>
|
||
body {
|
||
font-family: Arial, sans-serif;
|
||
background-color: #000; /* Set background color to black */
|
||
color: #fff; /* Set text color to white */
|
||
text-align: center; /* Center-align text */
|
||
}
|
||
table {
|
||
margin: auto;
|
||
width: 500px;
|
||
border-collapse: collapse;
|
||
}
|
||
td {
|
||
padding: 10px;
|
||
}
|
||
input[type="number"], input[type="text"] {
|
||
width: 90%;
|
||
background-color: #333; /* Dark background for inputs */
|
||
color: white; /* White text for inputs */
|
||
border: 1px solid #555; /* Slight border for inputs */
|
||
}
|
||
input[type="button"], .copy-button {
|
||
width: 100%;
|
||
padding: 10px;
|
||
background-color: #28a745;
|
||
color: white;
|
||
border: none;
|
||
cursor: pointer;
|
||
}
|
||
input[type="button"]:hover, .copy-button:hover {
|
||
background-color: #218838;
|
||
}
|
||
.result {
|
||
background-color: gray;
|
||
text-align: center;
|
||
padding: 10px;
|
||
}
|
||
img {
|
||
display: block; /* Make it block-level to center it */
|
||
margin: 0 auto; /* Center the image */
|
||
max-width: 100%; /* Responsive image */
|
||
height: auto; /* Maintain aspect ratio */
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
|
||
<img src="https://i.ibb.co/py2VgYV/securityops-logo.jpg" alt="Follow the white rabbit">
|
||
|
||
<form method="POST" onsubmit="event.preventDefault(); generatePassword();">
|
||
<table>
|
||
<tr>
|
||
<td align="right">Password length:</td>
|
||
<td><input type="number" id="len" value="250" min="1" required></td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
<label><input type="checkbox" id="russian" checked> Include Russian characters</label><br>
|
||
<label><input type="checkbox" id="chinese" checked> Include Chinese characters</label><br>
|
||
<label><input type="checkbox" id="japanese" checked> Include Japanese characters</label><br>
|
||
<label><input type="checkbox" id="korean" checked> Include Korean characters</label><br>
|
||
<label><input type="checkbox" id="georgian" checked> Include Georgian characters</label><br>
|
||
<label><input type="checkbox" id="ascii" checked> Include ASCII characters</label><br>
|
||
<label><input type="checkbox" id="extascii" checked> Include ASCII extended characters</label><br>
|
||
<label><input type="checkbox" id="alien" checked> Include Alien characters</label><br>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
<input type="button" value="Generate Password!" onclick="generatePassword();">
|
||
</td>
|
||
</tr>
|
||
<tr class="result">
|
||
<td colspan="2">
|
||
<strong><span id="generatedPassword"></span></strong>
|
||
<p id="securityScore"></p>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2">
|
||
<button type="button" class="copy-button" onclick="copyToClipboard()">Copy to Clipboard</button>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</form>
|
||
|
||
<script>
|
||
function generatePassword() {
|
||
// Character sets
|
||
const russianChars = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';
|
||
const chineseChars = '你好世界abc'; // Add more characters as needed
|
||
const japaneseChars = 'こんにちは世界'; // Add more characters as needed
|
||
const koreanChars = '안녕하세요세계'; // Add more characters as needed
|
||
const georgianChars = 'ა,b,გ,დ,ე,ვ,ზ,თ,ი,კ,ლ,მ,ნ,ო,პ,ჟ,რ,ს,ტ,უფ,ქ,ღ,ყ,შ,ჩ,ც,ძ,წ,ჭ,ხ,ჯ,ჰ'; // Georgian characters
|
||
const asciiChars = '!"#$%&\'()*+,-./0123456789:;<=>?@[\\]^_`{|}~ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
||
const extasciiChars = 'ÇüéâäàåçêëèïÎÄÅÉæôœøùûùúûüýþÿ';
|
||
const alienChars = '⍾⍙⟒⍀⏁⊬⎍⟟⍜⌿ç⌰☍⟊⊑☌⎎⎅⌇⏃⋉⌖☊⎐⏚⋏⋔';
|
||
|
||
// Get selected character sets
|
||
let charSet = '';
|
||
if (document.getElementById("russian").checked) charSet += russianChars;
|
||
if (document.getElementById("chinese").checked) charSet += chineseChars;
|
||
if (document.getElementById("japanese").checked) charSet += japaneseChars;
|
||
if (document.getElementById("korean").checked) charSet += koreanChars;
|
||
if (document.getElementById("georgian").checked) charSet += georgianChars;
|
||
if (document.getElementById("ascii").checked) charSet += asciiChars;
|
||
if (document.getElementById("extascii").checked) charSet += extasciiChars;
|
||
if (document.getElementById("alien").checked) charSet += alienChars;
|
||
|
||
// Get password length
|
||
const length = parseInt(document.getElementById("len").value);
|
||
let password = '';
|
||
|
||
// Generate password
|
||
for (let i = 0; i < length; i++) {
|
||
const randomIndex = Math.floor(Math.random() * charSet.length);
|
||
password += charSet[randomIndex];
|
||
}
|
||
|
||
// Display generated password
|
||
document.getElementById("generatedPassword").innerText = password;
|
||
// Calculate and display security score
|
||
displaySecurityScore(password);
|
||
}
|
||
|
||
function displaySecurityScore(password) {
|
||
let score = 0;
|
||
|
||
// Scoring criteria
|
||
const lengthCriteria = password.length >= 12 ? 2 : 0;
|
||
const upperCaseCriteria = /[A-Z]/.test(password) ? 1 : 0;
|
||
const lowerCaseCriteria = /[a-z]/.test(password) ? 1 : 0;
|
||
const numberCriteria = /[0-9]/.test(password) ? 1 : 0;
|
||
const specialCharCriteria = /[!"#$%&'()*+,-./:;<=>?@[\\\]^_`{|}~]/.test(password) ? 1 : 0;
|
||
const unicodeCriteria = /[\u0400-\u04FF\u4e00-\u9FFF\uac00-\ud7af]/.test(password) ? 1 : 0; // Unicode ranges for Russian, Chinese, Korean, etc.
|
||
|
||
score += lengthCriteria + upperCaseCriteria + lowerCaseCriteria + numberCriteria + specialCharCriteria + unicodeCriteria;
|
||
|
||
// Display score
|
||
const scoreText = score < 3 ? "Weak" : score < 5 ? "Moderate" : "Strong";
|
||
document.getElementById("securityScore").innerText = `Security Score: ${score} (${scoreText})`;
|
||
}
|
||
|
||
function copyToClipboard() {
|
||
const password = document.getElementById("generatedPassword").innerText;
|
||
if (password) {
|
||
navigator.clipboard.writeText(password).then(() => {
|
||
alert('Password copied to clipboard!');
|
||
}, (err) => {
|
||
console.error('Could not copy text: ', err);
|
||
});
|
||
} else {
|
||
alert('No password generated to copy!');
|
||
}
|
||
}
|
||
</script>
|
||
</body>
|
||
</html>
|