Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
damartripamungkas committed Aug 12, 2024
0 parents commit 0350311
Show file tree
Hide file tree
Showing 16 changed files with 353 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules
dist
40 changes: 40 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"overrides": [
{
"files": "*.js",
"options": {
"printWidth": 200,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"trailingComma": "none",
"arrowParens": "always",
"bracketSameLine": false
}
},
{
"files": "*.html",
"options": {
"printWidth": 400,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"trailingComma": "none",
"arrowParens": "always",
"bracketSameLine": false
}
},
{
"files": "*.md",
"options": {
"printWidth": 400,
"tabWidth": 2,
"useTabs": false,
"semi": false,
"trailingComma": "none",
"arrowParens": "always",
"bracketSameLine": false
}
}
]
}
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2025 damartripamungkas

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
49 changes: 49 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<h1 align="center">
STRONGPG
</h1>

<p align="center">
<img alt="GitHub top language" src="https://img.shields.io/github/languages/top/damartripamungkas/strongpg?color=04D361&labelColor=000000">

<a href="#">
<img alt="Made by" src="https://img.shields.io/static/v1?label=made%20by&message=damartripamungkas&color=04D361&labelColor=000000">
</a>

<img alt="Repository size" src="https://img.shields.io/github/repo-size/damartripamungkas/strongpg?color=04D361&labelColor=000000">

<a href="#">
<img alt="GitHub last commit" src="https://img.shields.io/github/last-commit/damartripamungkas/strongpg?color=04D361&labelColor=000000">
</a>
</p>

<br>

![Home](/screenshot/home.png)

### 🌐 Visit :

- https://strongpg.my.id
- https://damartripamungkas.github.io/strongpg

### 📖 Description :

This website helps users who want to create `very strong` passwords for accounts on the internet such as Facebook, Google, TikTok and others. This website will create a password from the text you enter (see image above).

### 🪂 Features :

- supports everything for account passwords including those requiring symbols, numbers
- ripemd128 hashing algorithm for create result password then slice from 0 ~ 16. formula: `@X + ripemd128(..).slice(0, 16)`
- reinforcement Before iterations: will perform hashing with the formula listed before iteration.
- support iterations, Iteration refers to applying the hash function double based on the provided number. For instance, if the number given is 2, the process would be as follows: `hash(hash("your text"))` In other words, your words are hashed once, then the output is hashed again. So a higher count leads to greater computation worked into hashing the data.

### 👮 Security :

This website does not store any user input or other user data. You may review the source code to confirm that no data is saved. Additionally, turning off internet connection when accessing the website to prove it.

### 🥤 Donation For Support Me :

contact me at telegram [here](https://t.me/damartripamungkas)

### 📝 License :

Licensed see [here](./LICENSE).
106 changes: 106 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="author" content="damartripamungkas" />
<meta name="description" content="Anti-hack password generator for account creation on the internet" />
<title>Strongpg | password generator</title>
<link rel="apple-touch-icon" sizes="180x180" href="./public/favicon/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="./public/favicon/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="./public/favicon/favicon-16x16.png" />
<link rel="manifest" href="./public/favicon/site.webmanifest" />
<link rel="stylesheet" href="./public/css/style.css" />
</head>
<body>
<div class="container">
<div class="card">
<h1 class="mt-0">STRONGPG</h1>
<div class="pt-1">
version:
<a id="value-version" href="./public/project.js">V0.0.0</a>
</div>
<div class="pt-1">
creator:
<a href="https://github.com/damartripamungkas">damartripamungkas</a>
</div>
<div class="pt-1">
donation:
<a href="https://t.me/damartripamungkas">click here</a>
</div>
<div class="pt-1">
repository:
<a href="https://github.com/damartripamungkas/strongpg">https://github.com/damartripamungkas/strongpg</a>
</div>
</div>

<div class="card">
<p class="mt-0 mb-1">Reinforcement Before iterations</p>
<select id="select-reinforcement" aria-label="select-1">
<option value="1" selected>1. sha256(sha256(text))</option>
</select>

<p class="pt-10 mb-1">Number of iterations</p>
<input id="input-iterations" type="number" value="1" min="1" max="100" style="min-width: 12rem" />

<p class="pt-10 mb-1">Enter the text you want and turn it into a strong password</p>
<textarea id="input-text" type="text" class="w-full"></textarea>

<p class="pt-10 mb-1">Result strong password</p>
<input id="input-password" type="text" class="w-full click-able" disabled />
<button id="copy-input-password" class="mt-1">Copy</button>
</div>
</div>

<script src="./public/project.js"></script>
<script src="./public/js/crypto-api.min.js"></script>
<script lang="text/javascript">
document.getElementById("value-version").textContent = `V${project.version}`

const sha256 = (v) => CryptoApi.hash("sha256", v)
const ripemd128 = (v) => CryptoApi.hash("ripemd128", v)
const genStrongPass = (str, iterations, reinforcement) => {
let pk = ""
if (reinforcement == 1) {
// 1. sha256(sha256(text))
pk = sha256(sha256(str))
}

// Hash interation results other than 1
pk = ripemd128(pk)
for (let index = 1; index < iterations; index++) {
pk = ripemd128(pk);
}

const comptaible = `@X${pk.slice(0, 16)}`
return comptaible
}

const inputText = document.getElementById("input-text")
const inputPassword = document.getElementById("input-password")
const inputIterations = document.getElementById("input-iterations")
const selectReinforcement = document.getElementById("select-reinforcement")
const buttonCopyInputPassword = document.getElementById("copy-input-password")
const runGenStrongPass = () => {
if (inputText.value.length == 0) {
inputPassword.value = ""
return
}
if (inputText.value.includes(" ")) {
inputText.value = inputText.value.replaceAll(" ", "")
}

inputPassword.value = genStrongPass(inputText.value, inputIterations.value, selectReinforcement.value)
}

inputText.oninput = runGenStrongPass
inputIterations.oninput = runGenStrongPass
selectReinforcement.onchange = runGenStrongPass
buttonCopyInputPassword.onclick = () => {
inputPassword.select();
inputPassword.setSelectionRange(0, 99999); // For mobile devices
navigator.clipboard.writeText(inputPassword.value);
}
</script>
</body>
</html>
126 changes: 126 additions & 0 deletions public/css/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
body {
font-family: monospace;
background-color: #f2f2f2;
font-size: large;
font-weight: 100;
}

@media screen and (max-width: 576px) {
a {
font-size: large;
}

p {
font-size: large;
}
}

p {
color: #252525;
margin: 0;
overflow-wrap: break-word;
}

a {
margin: 0;
color: black;
text-decoration: none;
overflow-wrap: break-word;
}

textarea {
border-radius: 0.25rem;
border: 2px solid #ccc;
font-size: large;
}

input {
color: #252525;
font-size: medium;
border: 2px solid #ccc;
border-radius: 0.25rem;
min-height: 1.25rem;
}

button {
border-radius: 0.25rem;
border: 2px solid #ccc;
padding-top: 0.3rem;
padding-bottom: 0.3rem;
padding-left: 0.8rem;
padding-right: 0.8rem;
cursor: pointer;
}

select {
border-radius: 0.25rem;
border: 2px solid #ccc;
font-size: medium;
width: 200px;
}

.w-full {
min-width: 100%;
max-width: 100%;
}

.btn-text-area {
display: flex;
flex-wrap: wrap;
}

.btn-text-area button {
border-radius: 0.3rem 0 0 0.3rem;
border: 1px solid #ccc;
flex: 1;
}

.btn-text-area input {
border-radius: 0 0.3rem 0.3rem 0;
flex: 2;
text-align: center;
border: 1px solid #ccc;
height: 2rem;
white-space: normal;
word-wrap: break-word;
overflow-y: hidden;
/* padding-top: 12px; */
}

.container {
max-width: 45rem;
margin: 0 auto;
}

.card {
border: 0.1px solid #ccc;
padding: 30px;
margin-bottom: 15px;
box-shadow: 0 3px 1px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
background-color: #fff;
border-radius: 0.5rem;
}

.pt-10 {
padding-top: 2.5rem;
}

.pt-1 {
padding-top: 0.4rem;
}

.mt-0 {
margin-top: 0;
}

.mt-1 {
margin-top: 0.4rem;
}

.mb-1 {
margin-bottom: 0.4rem;
}

.click-able {
cursor: pointer;
}
Binary file added public/favicon/android-chrome-192x192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon/android-chrome-512x512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon/favicon-16x16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon/favicon-32x32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon/favicon.ico
Binary file not shown.
1 change: 1 addition & 0 deletions public/favicon/site.webmanifest
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
2 changes: 2 additions & 0 deletions public/js/crypto-api.min.js

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions public/project.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const project = {
version: "1.0.0",
version_history: {
"1.0.0": "initial project"
}
}
Binary file added screenshot/home.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 0350311

Please sign in to comment.