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>
|