@jjlmoya/utils-tools 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/category/i18n/de.ts +172 -0
- package/src/category/i18n/id.ts +172 -0
- package/src/category/i18n/it.ts +172 -0
- package/src/category/i18n/ja.ts +172 -0
- package/src/category/i18n/ko.ts +172 -0
- package/src/category/i18n/nl.ts +172 -0
- package/src/category/i18n/pl.ts +172 -0
- package/src/category/i18n/pt.ts +172 -0
- package/src/category/i18n/ru.ts +172 -0
- package/src/category/i18n/sv.ts +172 -0
- package/src/category/i18n/tr.ts +172 -0
- package/src/category/i18n/zh.ts +172 -0
- package/src/category/index.ts +13 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tests/title_quality.test.ts +0 -1
- package/src/tool/date-diff-calculator/i18n/de.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/fr.ts +1 -1
- package/src/tool/date-diff-calculator/i18n/id.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/it.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/ja.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/ko.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/nl.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/pl.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/pt.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/ru.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/sv.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/tr.ts +132 -0
- package/src/tool/date-diff-calculator/i18n/zh.ts +132 -0
- package/src/tool/date-diff-calculator/index.ts +12 -0
- package/src/tool/drive-direct-link/i18n/de.ts +118 -0
- package/src/tool/drive-direct-link/i18n/id.ts +118 -0
- package/src/tool/drive-direct-link/i18n/it.ts +118 -0
- package/src/tool/drive-direct-link/i18n/ja.ts +118 -0
- package/src/tool/drive-direct-link/i18n/ko.ts +118 -0
- package/src/tool/drive-direct-link/i18n/nl.ts +118 -0
- package/src/tool/drive-direct-link/i18n/pl.ts +118 -0
- package/src/tool/drive-direct-link/i18n/pt.ts +118 -0
- package/src/tool/drive-direct-link/i18n/ru.ts +118 -0
- package/src/tool/drive-direct-link/i18n/sv.ts +118 -0
- package/src/tool/drive-direct-link/i18n/tr.ts +118 -0
- package/src/tool/drive-direct-link/i18n/zh.ts +118 -0
- package/src/tool/drive-direct-link/index.ts +12 -0
- package/src/tool/email-list-cleaner/i18n/de.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/es.ts +1 -1
- package/src/tool/email-list-cleaner/i18n/fr.ts +1 -1
- package/src/tool/email-list-cleaner/i18n/id.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/it.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/ja.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/ko.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/nl.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/pl.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/pt.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/ru.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/sv.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/tr.ts +140 -0
- package/src/tool/email-list-cleaner/i18n/zh.ts +140 -0
- package/src/tool/email-list-cleaner/index.ts +12 -0
- package/src/tool/env-badge-spain/i18n/de.ts +153 -0
- package/src/tool/env-badge-spain/i18n/es.ts +1 -1
- package/src/tool/env-badge-spain/i18n/fr.ts +1 -1
- package/src/tool/env-badge-spain/i18n/id.ts +153 -0
- package/src/tool/env-badge-spain/i18n/it.ts +153 -0
- package/src/tool/env-badge-spain/i18n/ja.ts +153 -0
- package/src/tool/env-badge-spain/i18n/ko.ts +153 -0
- package/src/tool/env-badge-spain/i18n/nl.ts +153 -0
- package/src/tool/env-badge-spain/i18n/pl.ts +153 -0
- package/src/tool/env-badge-spain/i18n/pt.ts +153 -0
- package/src/tool/env-badge-spain/i18n/ru.ts +153 -0
- package/src/tool/env-badge-spain/i18n/sv.ts +153 -0
- package/src/tool/env-badge-spain/i18n/tr.ts +153 -0
- package/src/tool/env-badge-spain/i18n/zh.ts +153 -0
- package/src/tool/env-badge-spain/index.ts +12 -0
- package/src/tool/morse-beacon/i18n/de.ts +157 -0
- package/src/tool/morse-beacon/i18n/es.ts +1 -1
- package/src/tool/morse-beacon/i18n/id.ts +157 -0
- package/src/tool/morse-beacon/i18n/it.ts +157 -0
- package/src/tool/morse-beacon/i18n/ja.ts +157 -0
- package/src/tool/morse-beacon/i18n/ko.ts +157 -0
- package/src/tool/morse-beacon/i18n/nl.ts +157 -0
- package/src/tool/morse-beacon/i18n/pl.ts +157 -0
- package/src/tool/morse-beacon/i18n/pt.ts +157 -0
- package/src/tool/morse-beacon/i18n/ru.ts +157 -0
- package/src/tool/morse-beacon/i18n/sv.ts +157 -0
- package/src/tool/morse-beacon/i18n/tr.ts +157 -0
- package/src/tool/morse-beacon/i18n/zh.ts +157 -0
- package/src/tool/morse-beacon/index.ts +13 -1
- package/src/tool/password-generator/i18n/de.ts +166 -0
- package/src/tool/password-generator/i18n/fr.ts +1 -1
- package/src/tool/password-generator/i18n/id.ts +166 -0
- package/src/tool/password-generator/i18n/it.ts +166 -0
- package/src/tool/password-generator/i18n/ja.ts +166 -0
- package/src/tool/password-generator/i18n/ko.ts +166 -0
- package/src/tool/password-generator/i18n/nl.ts +166 -0
- package/src/tool/password-generator/i18n/pl.ts +166 -0
- package/src/tool/password-generator/i18n/pt.ts +166 -0
- package/src/tool/password-generator/i18n/ru.ts +166 -0
- package/src/tool/password-generator/i18n/sv.ts +166 -0
- package/src/tool/password-generator/i18n/tr.ts +166 -0
- package/src/tool/password-generator/i18n/zh.ts +166 -0
- package/src/tool/password-generator/index.ts +13 -1
- package/src/tool/routes/i18n/de.ts +157 -0
- package/src/tool/routes/i18n/id.ts +157 -0
- package/src/tool/routes/i18n/it.ts +157 -0
- package/src/tool/routes/i18n/ja.ts +157 -0
- package/src/tool/routes/i18n/ko.ts +157 -0
- package/src/tool/routes/i18n/nl.ts +157 -0
- package/src/tool/routes/i18n/pl.ts +157 -0
- package/src/tool/routes/i18n/pt.ts +157 -0
- package/src/tool/routes/i18n/ru.ts +157 -0
- package/src/tool/routes/i18n/sv.ts +157 -0
- package/src/tool/routes/i18n/tr.ts +157 -0
- package/src/tool/routes/i18n/zh.ts +157 -0
- package/src/tool/routes/index.ts +13 -1
- package/src/tool/rule-of-three/i18n/de.ts +171 -0
- package/src/tool/rule-of-three/i18n/en.ts +1 -1
- package/src/tool/rule-of-three/i18n/id.ts +171 -0
- package/src/tool/rule-of-three/i18n/it.ts +171 -0
- package/src/tool/rule-of-three/i18n/ja.ts +171 -0
- package/src/tool/rule-of-three/i18n/ko.ts +171 -0
- package/src/tool/rule-of-three/i18n/nl.ts +171 -0
- package/src/tool/rule-of-three/i18n/pl.ts +171 -0
- package/src/tool/rule-of-three/i18n/pt.ts +171 -0
- package/src/tool/rule-of-three/i18n/ru.ts +171 -0
- package/src/tool/rule-of-three/i18n/sv.ts +171 -0
- package/src/tool/rule-of-three/i18n/tr.ts +171 -0
- package/src/tool/rule-of-three/i18n/zh.ts +171 -0
- package/src/tool/rule-of-three/index.ts +13 -1
- package/src/tool/seo-content-optimizer/i18n/de.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/id.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/it.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/ja.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/ko.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/nl.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/pl.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/pt.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/ru.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/sv.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/tr.ts +136 -0
- package/src/tool/seo-content-optimizer/i18n/zh.ts +136 -0
- package/src/tool/seo-content-optimizer/index.ts +12 -0
- package/src/tool/speed-reader/i18n/de.ts +152 -0
- package/src/tool/speed-reader/i18n/es.ts +1 -1
- package/src/tool/speed-reader/i18n/id.ts +152 -0
- package/src/tool/speed-reader/i18n/it.ts +152 -0
- package/src/tool/speed-reader/i18n/ja.ts +152 -0
- package/src/tool/speed-reader/i18n/ko.ts +152 -0
- package/src/tool/speed-reader/i18n/nl.ts +152 -0
- package/src/tool/speed-reader/i18n/pl.ts +152 -0
- package/src/tool/speed-reader/i18n/pt.ts +152 -0
- package/src/tool/speed-reader/i18n/ru.ts +152 -0
- package/src/tool/speed-reader/i18n/sv.ts +152 -0
- package/src/tool/speed-reader/i18n/tr.ts +152 -0
- package/src/tool/speed-reader/i18n/zh.ts +152 -0
- package/src/tool/speed-reader/index.ts +12 -0
- package/src/tool/text-pixel-calculator/i18n/de.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/id.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/it.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/ja.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/ko.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/nl.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/pl.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/pt.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/ru.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/sv.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/tr.ts +133 -0
- package/src/tool/text-pixel-calculator/i18n/zh.ts +133 -0
- package/src/tool/text-pixel-calculator/index.ts +12 -0
- package/src/tool/whatsapp-link/i18n/de.ts +128 -0
- package/src/tool/whatsapp-link/i18n/es.ts +1 -1
- package/src/tool/whatsapp-link/i18n/id.ts +128 -0
- package/src/tool/whatsapp-link/i18n/it.ts +128 -0
- package/src/tool/whatsapp-link/i18n/ja.ts +128 -0
- package/src/tool/whatsapp-link/i18n/ko.ts +128 -0
- package/src/tool/whatsapp-link/i18n/nl.ts +128 -0
- package/src/tool/whatsapp-link/i18n/pl.ts +128 -0
- package/src/tool/whatsapp-link/i18n/pt.ts +128 -0
- package/src/tool/whatsapp-link/i18n/ru.ts +128 -0
- package/src/tool/whatsapp-link/i18n/sv.ts +128 -0
- package/src/tool/whatsapp-link/i18n/tr.ts +128 -0
- package/src/tool/whatsapp-link/i18n/zh.ts +128 -0
- package/src/tool/whatsapp-link/index.ts +12 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { PasswordGeneratorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const faqData = [
|
|
6
|
+
{
|
|
7
|
+
question: 'Apakah aman menggunakan generator kata sandi online?',
|
|
8
|
+
answer: "Ya, selama generator tersebut berjalan di sisi klien (client-side). Alat kami menghasilkan kata sandi secara lokal di browser Anda menggunakan algoritma yang aman secara kriptografis. Kata sandi Anda tidak pernah dikirim melalui internet atau disimpan di server mana pun.",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
question: "Apa yang membuat kata sandi 'tahan peretas'?",
|
|
12
|
+
answer: 'Kuncinya adalah entropi (keacakan). Campuran huruf besar, huruf kecil, angka, dan simbol khusus dikombinasikan dengan panjang minimum 12-16 karakter membuat serangan brute-force praktis tidak mungkin dilakukan dengan teknologi saat ini.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Mengapa harus menghindari kata-kata atau tanggal yang umum?',
|
|
16
|
+
answer: 'Peretas menggunakan serangan kamus yang menguji jutaan kata, nama, dan kombinasi tanggal per detik. Kata sandi yang murni acak tidak mengikuti pola linguistik apa pun, sehingga jauh lebih aman.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Haruskah saya menghafal semua kata sandi saya?',
|
|
20
|
+
answer: 'Tidak disarankan. Pendekatan yang ideal adalah menggunakan pengelola kata sandi (seperti Bitwarden, 1Password, atau yang bawaan browser Anda) untuk menyimpan kata sandi yang panjang dan acak ini, sehingga Anda hanya perlu mengingat satu kata sandi utama yang kuat.',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToData = [
|
|
25
|
+
{
|
|
26
|
+
name: 'Atur panjangnya',
|
|
27
|
+
text: 'Sesuaikan penggeser untuk memilih berapa banyak karakter yang akan dimiliki kata sandi Anda. Standar keamanan saat ini merekomendasikan setidaknya 12 karakter.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Pilih kompleksitas',
|
|
31
|
+
text: 'Centang opsi huruf besar, angka, dan simbol sesuai dengan persyaratan situs tempat Anda akan menggunakan kata sandi tersebut.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Hasilkan kata sandi',
|
|
35
|
+
text: 'Klik tombol hasilkan. Setiap klik membuat kombinasi unik dengan entropi tinggi berdasarkan algoritma kriptografi.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Salin dengan satu klik',
|
|
39
|
+
text: 'Gunakan tombol salin untuk mengirim kata sandi langsung ke papan klip Anda dengan cara yang aman.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: 'Cara menggunakan pembuat kata sandi yang aman',
|
|
57
|
+
step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
61
|
+
'@context': 'https://schema.org',
|
|
62
|
+
'@type': 'SoftwareApplication',
|
|
63
|
+
name: 'Pembuat Kata Sandi Acak Aman',
|
|
64
|
+
applicationCategory: 'SecurityApplication',
|
|
65
|
+
operatingSystem: 'Web',
|
|
66
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
67
|
+
description: 'Buat kata sandi yang kuat dan tahan peretas secara instan. Alat keamanan siber gratis untuk menghasilkan kunci acak dan aman.',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const ui: PasswordGeneratorUI = {
|
|
71
|
+
generating: 'Menghasilkan...',
|
|
72
|
+
labelSecurity: 'Kekuatan',
|
|
73
|
+
labelLength: 'Panjang',
|
|
74
|
+
strengthWeak: 'Lemah',
|
|
75
|
+
strengthFair: 'Cukup',
|
|
76
|
+
strengthGood: 'Bagus',
|
|
77
|
+
strengthStrong: 'Kuat',
|
|
78
|
+
strengthUnbreakable: 'Tidak Terpecahkan',
|
|
79
|
+
optionUppercase: 'Huruf Besar',
|
|
80
|
+
optionLowercase: 'Huruf Kecil',
|
|
81
|
+
optionNumbers: 'Angka',
|
|
82
|
+
optionSymbols: 'Simbol',
|
|
83
|
+
copyTitle: 'Salin',
|
|
84
|
+
regenerateTitle: 'Hasilkan Baru',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
88
|
+
slug: 'pembuat-kata-sandi',
|
|
89
|
+
title: 'Pembuat Kata Sandi Acak Aman',
|
|
90
|
+
description: 'Buat kata sandi yang kuat dan tahan peretas secara instan. Alat keamanan siber gratis untuk menghasilkan kunci acak dan aman.',
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
howTo: howToData,
|
|
95
|
+
bibliographyTitle: 'Referensi',
|
|
96
|
+
bibliography: [
|
|
97
|
+
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
+
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
+
{ name: 'Password — Wikipedia', url: 'https://id.wikipedia.org/wiki/Kata_sandi' },
|
|
100
|
+
{ name: 'Have I Been Pwned — Periksa apakah kata sandi Anda terekspos', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
+
],
|
|
102
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
|
+
seo: [
|
|
104
|
+
{
|
|
105
|
+
type: 'title',
|
|
106
|
+
text: 'Anatomi Kata Sandi yang Tidak Dapat Dipecahkan',
|
|
107
|
+
level: 2,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Kata sandi Anda adalah satu-satunya penghalang antara data pribadi Anda (perbankan, medis, foto) dan penjahat siber. Namun, rata-rata pengguna masih mengandalkan pola yang dapat ditebak seperti "123456" atau nama hewan peliharaan, yang dapat dipecahkan dalam <strong>kurang dari satu detik</strong>.',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'comparative',
|
|
115
|
+
columns: 2,
|
|
116
|
+
items: [
|
|
117
|
+
{
|
|
118
|
+
icon: 'mdi:alert-circle',
|
|
119
|
+
title: 'Bahaya Rainbow Tables',
|
|
120
|
+
description: 'Peretas tidak menebak kata sandi Anda satu per satu. Mereka menggunakan database besar (Rainbow Tables) yang berisi jutaan hash kata sandi umum yang telah dihitung sebelumnya. Jika kata sandi Anda ada di kamus atau merupakan frasa terkenal, kata sandi tersebut sudah bocor sebelum Anda mulai menggunakannya.',
|
|
121
|
+
points: [],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
icon: 'mdi:flask',
|
|
125
|
+
title: 'Solusi: Entropi Murni',
|
|
126
|
+
description: 'Entropi mengukur kekacauan atau ketidakpastian. Semakin tinggi entropi (bit), semakin banyak waktu yang dibutuhkan komputer untuk memecahkannya. Alat ini menggunakan crypto.getRandomValues(), API browser yang menghasilkan angka acak yang aman secara kriptografis, tidak seperti Math.random() yang dapat ditebak.',
|
|
127
|
+
points: [],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: 'Prinsip Dasar Keamanan Siber',
|
|
134
|
+
level: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'comparative',
|
|
138
|
+
columns: 3,
|
|
139
|
+
items: [
|
|
140
|
+
{
|
|
141
|
+
icon: 'mdi:ruler',
|
|
142
|
+
title: 'Panjang lebih utama daripada Kompleksitas',
|
|
143
|
+
description: 'Kata sandi 20 karakter yang hanya terdiri dari huruf kecil lebih aman daripada kata sandi 8 karakter dengan simbol yang langka. Secara matematis, setiap karakter tambahan melipatgandakan kesulitan secara eksponensial.',
|
|
144
|
+
points: [],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
icon: 'mdi:eye-off',
|
|
148
|
+
title: 'Mitos Substitusi',
|
|
149
|
+
description: 'Mengganti "a" dengan "@" atau "e" dengan "3" (Leetspeak) tidak menipu siapa pun. Kamus serangan modern sudah menyertakan variasi ini secara otomatis. Hindari menggunakan kata-kata yang mudah dikenali.',
|
|
150
|
+
points: [],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
icon: 'mdi:key-chain',
|
|
154
|
+
title: 'Situs Berbeda, Kunci Berbeda',
|
|
155
|
+
description: 'Jika Anda menggunakan kata sandi yang sama untuk email dan forum, dan forum tersebut diretas, mereka sekarang memiliki akses ke email Anda. Gunakan Pengelola Kata Sandi (seperti Bitwarden atau 1Password) untuk mengingat kata sandi yang rumit untuk Anda.',
|
|
156
|
+
points: [],
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'tip',
|
|
162
|
+
title: 'Privasi terjamin',
|
|
163
|
+
html: 'Semua proses pembuatan terjadi <strong>di browser Anda</strong>. Tidak ada kata sandi yang dikirimkan melalui internet atau dicatat di server mana pun. Kode sumbernya dapat diaudit.',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { PasswordGeneratorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const faqData = [
|
|
6
|
+
{
|
|
7
|
+
question: 'È sicuro usare un generatore di password online?',
|
|
8
|
+
answer: "Sì, a patto che il generatore sia basato sul client. Il nostro strumento genera password localmente nel tuo browser utilizzando algoritmi crittograficamente sicuri. La tua password non viene mai inviata via internet né memorizzata su alcun server.",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
question: "Cosa rende una password 'a prova di hacker'?",
|
|
12
|
+
answer: "La chiave è l'entropia (casualità). Un mix di lettere maiuscole, minuscole, numeri e simboli speciali combinato con una lunghezza minima di 12-16 caratteri rende un attacco brute-force praticamente impossibile con la tecnologia attuale.",
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Perché evitare parole comuni o date?',
|
|
16
|
+
answer: 'Gli hacker utilizzano attacchi a dizionario che testano milioni di parole, nomi e combinazioni di date al secondo. Le password puramente casuali non seguono schemi linguistici, rendendole molto più sicure.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Dovrei memorizzare tutte le mie password?',
|
|
20
|
+
answer: 'Non è raccomandato. L\'approccio ideale è utilizzare un gestore di password (come Bitwarden, 1Password o quello integrato nel browser) per memorizzare queste password lunghe e casuali, in modo da dover ricordare solo una password principale forte.',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToData = [
|
|
25
|
+
{
|
|
26
|
+
name: 'Imposta la lunghezza',
|
|
27
|
+
text: 'Regola lo slider per scegliere quanti caratteri avrà la tua password. Gli standard di sicurezza attuali raccomandano almeno 12.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: 'Scegli la complessità',
|
|
31
|
+
text: 'Seleziona le opzioni per maiuscole, numeri e simboli in base ai requisiti del sito in cui utilizzerai la password.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'Genera la password',
|
|
35
|
+
text: 'Clicca sul pulsante genera. Ogni clic crea una combinazione unica ad alta entropia basata su algoritmi crittografici.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'Copia con un clic',
|
|
39
|
+
text: 'Usa il pulsante copia per inviare la password direttamente nei tuoi appunti in modo sicuro.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: 'Come usare il generatore di password sicure',
|
|
57
|
+
step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
61
|
+
'@context': 'https://schema.org',
|
|
62
|
+
'@type': 'SoftwareApplication',
|
|
63
|
+
name: 'Generatore di Password Casuali Sicure',
|
|
64
|
+
applicationCategory: 'SecurityApplication',
|
|
65
|
+
operatingSystem: 'Web',
|
|
66
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
67
|
+
description: 'Crea istantaneamente password forti e a prova di hacker. Strumento gratuito di cybersecurity per generare chiavi casuali e sicure.',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const ui: PasswordGeneratorUI = {
|
|
71
|
+
generating: 'Generazione...',
|
|
72
|
+
labelSecurity: 'Forza',
|
|
73
|
+
labelLength: 'Lunghezza',
|
|
74
|
+
strengthWeak: 'Debole',
|
|
75
|
+
strengthFair: 'Discreta',
|
|
76
|
+
strengthGood: 'Buona',
|
|
77
|
+
strengthStrong: 'Forte',
|
|
78
|
+
strengthUnbreakable: 'Inviolabile',
|
|
79
|
+
optionUppercase: 'Maiuscole',
|
|
80
|
+
optionLowercase: 'Minuscole',
|
|
81
|
+
optionNumbers: 'Numeri',
|
|
82
|
+
optionSymbols: 'Simboli',
|
|
83
|
+
copyTitle: 'Copia',
|
|
84
|
+
regenerateTitle: 'Genera Nuova',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
88
|
+
slug: 'generatore-password',
|
|
89
|
+
title: 'Generatore di Password Casuali Sicure',
|
|
90
|
+
description: 'Crea istantaneamente password forti e a prova di hacker. Strumento gratuito di cybersecurity per generare chiavi casuali e sicure.',
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: 'Domande Frequenti',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
howTo: howToData,
|
|
95
|
+
bibliographyTitle: 'Riferimenti',
|
|
96
|
+
bibliography: [
|
|
97
|
+
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
+
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
+
{ name: 'Password — Wikipedia', url: 'https://it.wikipedia.org/wiki/Password' },
|
|
100
|
+
{ name: 'Have I Been Pwned — Controlla se la tua password è stata esposta', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
+
],
|
|
102
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
|
+
seo: [
|
|
104
|
+
{
|
|
105
|
+
type: 'title',
|
|
106
|
+
text: 'L\'Anatomia di una Password Inviolabile',
|
|
107
|
+
level: 2,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'La tua password è l\'unica barriera tra i tuoi dati personali (banche, cartelle cliniche, foto) e un criminale informatico. Eppure l\'utente medio si affida ancora a schemi prevedibili come "123456" o nomi di animali domestici, che possono essere violati in <strong>meno di un secondo</strong>.',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'comparative',
|
|
115
|
+
columns: 2,
|
|
116
|
+
items: [
|
|
117
|
+
{
|
|
118
|
+
icon: 'mdi:alert-circle',
|
|
119
|
+
title: 'Il Pericolo delle Rainbow Table',
|
|
120
|
+
description: 'Gli hacker non indovinano la tua password un tentativo alla volta. Usano enormi database (Rainbow Table) contenenti milioni di hash precalcolati di password comuni. Se la tua password è nel dizionario o è una frase famosa, era già compromessa prima che iniziassi a usarla.',
|
|
121
|
+
points: [],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
icon: 'mdi:flask',
|
|
125
|
+
title: 'La Soluzione: Pura Entropia',
|
|
126
|
+
description: 'L\'entropia misura il disordine o l\'imprevedibilità. Maggiore è l\'entropia (bit), più tempo serve a un computer per violarla. Questo strumento utilizza crypto.getRandomValues(), un\'API del browser che genera numeri casuali crittograficamente sicuri, a differenza di Math.random() che è prevedibile.',
|
|
127
|
+
points: [],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: 'Principi di Base della Cybersecurity',
|
|
134
|
+
level: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'comparative',
|
|
138
|
+
columns: 3,
|
|
139
|
+
items: [
|
|
140
|
+
{
|
|
141
|
+
icon: 'mdi:ruler',
|
|
142
|
+
title: 'Lunghezza sopra Complessità',
|
|
143
|
+
description: 'Una password di 20 caratteri composta solo da minuscole è più sicura di una di 8 caratteri con simboli rari. Matematicamente, ogni carattere extra moltiplica la difficoltà in modo esponenziale.',
|
|
144
|
+
points: [],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
icon: 'mdi:eye-off',
|
|
148
|
+
title: 'Il Mito della Sostituzione',
|
|
149
|
+
description: 'Sostituire la "a" con "@" o la "e" con "3" (Leetspeak) non inganna nessuno. I moderni dizionari di attacco includono già queste variazioni automaticamente. Evita di usare parole riconoscibili.',
|
|
150
|
+
points: [],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
icon: 'mdi:key-chain',
|
|
154
|
+
title: 'Sito Diverso, Chiave Diversa',
|
|
155
|
+
description: 'Se usi la stessa password per l\'e-mail e un forum, e il forum viene hackerato, ora hanno accesso alla tua e-mail. Usa un gestore di password (come Bitwarden o 1Password) per ricordare password complesse per te.',
|
|
156
|
+
points: [],
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'tip',
|
|
162
|
+
title: 'Privacy garantita',
|
|
163
|
+
html: 'Tutta la generazione avviene <strong>nel tuo browser</strong>. Nessuna password viene trasmessa via internet o registrata su alcun server. Il codice sorgente è verificabile.',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { PasswordGeneratorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const faqData = [
|
|
6
|
+
{
|
|
7
|
+
question: 'オンラインのパスワード生成ツールを使っても安全ですか?',
|
|
8
|
+
answer: 'はい、生成処理がクライアントサイドで行われる限り安全です。当ツールは、暗号学的に安全なアルゴリズムを使用して、お使いのブラウザ内でローカルにパスワードを生成します。パスワードがインターネット経由で送信されたり、サーバーに保存されたりすることはありません。',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
question: '何がパスワードを「ハッカーに強い」ものにするのですか?',
|
|
12
|
+
answer: '鍵となるのはエントロピー(不規則性)です。大文字、小文字、数字、特殊記号を組み合わせ、最低12〜16文字の長さにすることで、現在のテクノロジーでは総当たり攻撃(ブルートフォース攻撃)を実質的に不可能にします。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'なぜ一般的な単語や日付を避けるべきなのですか?',
|
|
16
|
+
answer: 'ハッカーは、1秒間に数百万もの単語、名前、日付の組み合わせをテストする辞書攻撃を使用します。完全にランダムなパスワードは言語的なパターンに従わないため、はるかに安全です。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'すべてのパスワードを暗記すべきですか?',
|
|
20
|
+
answer: '推奨されません。理想的な方法は、パスワードマネージャー(Bitwarden、1Password、またはブラウザ内蔵のものなど)を使用して、これらの長くランダムなパスワードを保存することです。これにより、強力なマスターパスワードを1つだけ覚えておけばよくなります。',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToData = [
|
|
25
|
+
{
|
|
26
|
+
name: '長さを設定',
|
|
27
|
+
text: 'スライダーを調整して、パスワードの文字数を選択します。現在のセキュリティ基準では、最低12文字以上が推奨されています。',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: '複雑さを選択',
|
|
31
|
+
text: 'パスワードを使用するサイトの要件に応じて、大文字、数字、記号の使用オプションにチェックを入れます。',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: 'パスワードを生成',
|
|
35
|
+
text: '生成ボタンをクリックします。クリックするたびに、暗号アルゴリズムに基づいた一意で高エントロピーな組み合わせが作成されます。',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: 'ワンクリックでコピー',
|
|
39
|
+
text: 'コピーボタンを使用して、パスワードを安全な方法でクリップボードに直接送信します。',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: '安全なパスワード生成ツールの使い方',
|
|
57
|
+
step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
61
|
+
'@context': 'https://schema.org',
|
|
62
|
+
'@type': 'SoftwareApplication',
|
|
63
|
+
name: '安全なランダムパスワード生成ツール',
|
|
64
|
+
applicationCategory: 'SecurityApplication',
|
|
65
|
+
operatingSystem: 'Web',
|
|
66
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
67
|
+
description: '強力でハッカーに強いパスワードを即座に作成します。ランダムで安全なキーを生成するための無料のサイバーセキュリティツール。',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const ui: PasswordGeneratorUI = {
|
|
71
|
+
generating: '生成中...',
|
|
72
|
+
labelSecurity: '強度',
|
|
73
|
+
labelLength: '長さ',
|
|
74
|
+
strengthWeak: '弱い',
|
|
75
|
+
strengthFair: '普通',
|
|
76
|
+
strengthGood: '良好',
|
|
77
|
+
strengthStrong: '強い',
|
|
78
|
+
strengthUnbreakable: '鉄壁',
|
|
79
|
+
optionUppercase: '大文字',
|
|
80
|
+
optionLowercase: '小文字',
|
|
81
|
+
optionNumbers: '数字',
|
|
82
|
+
optionSymbols: '記号',
|
|
83
|
+
copyTitle: 'コピー',
|
|
84
|
+
regenerateTitle: '新規生成',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
88
|
+
slug: 'password-generator',
|
|
89
|
+
title: '安全なランダムパスワード生成ツール',
|
|
90
|
+
description: '強力でハッカーに強いパスワードを即座に作成します。ランダムで安全なキーを生成するための無料のサイバーセキュリティツール。',
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: 'よくある質問',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
howTo: howToData,
|
|
95
|
+
bibliographyTitle: '参考文献',
|
|
96
|
+
bibliography: [
|
|
97
|
+
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
+
{ name: 'NIST SP 800-63B: Digital Identity Guidelines', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
+
{ name: 'パスワード — Wikipedia', url: 'https://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89' },
|
|
100
|
+
{ name: 'Have I Been Pwned — パスワードの漏洩を確認', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
+
],
|
|
102
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
|
+
seo: [
|
|
104
|
+
{
|
|
105
|
+
type: 'title',
|
|
106
|
+
text: '解読不可能なパスワードの構造',
|
|
107
|
+
level: 2,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'あなたのパスワードは、個人データ(銀行、医療、写真)とサイバー犯罪者を隔てる唯一の障壁です。しかし、平均的なユーザーはいまだに「123456」やペットの名前など、<strong>1秒未満</strong>で解読可能な予測可能なパターンに依存しています。',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'comparative',
|
|
115
|
+
columns: 2,
|
|
116
|
+
items: [
|
|
117
|
+
{
|
|
118
|
+
icon: 'mdi:alert-circle',
|
|
119
|
+
title: 'レインボーテーブルの脅威',
|
|
120
|
+
description: 'ハッカーは1回ずつパスワードを推測しているわけではありません。彼らは、一般的なパスワードの数百万もの計算済みハッシュを含む巨大なデータベース(レインボーテーブル)を使用します。もしあなたのパスワードが辞書に載っていたり、有名なフレーズであったりする場合、使い始める前からすでに侵害されていると言えます。',
|
|
121
|
+
points: [],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
icon: 'mdi:flask',
|
|
125
|
+
title: '解決策:純粋なエントロピー',
|
|
126
|
+
description: 'エントロピーは無秩序さや予測不能さを測定します。エントロピー(ビット)が高いほど、コンピューターが解読するのに必要な時間は長くなります。このツールは、予測可能な Math.random() とは異なり、暗号学的に安全な乱数を生成するブラウザAPIである crypto.getRandomValues() を使用しています。',
|
|
127
|
+
points: [],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: '基本的なサイバーセキュリティの原則',
|
|
134
|
+
level: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'comparative',
|
|
138
|
+
columns: 3,
|
|
139
|
+
items: [
|
|
140
|
+
{
|
|
141
|
+
icon: 'mdi:ruler',
|
|
142
|
+
title: '複雑さより長さ',
|
|
143
|
+
description: '小文字のみの20文字のパスワードは、珍しい記号を含む8文字のパスワードよりも安全です。数学的には、1文字増えるごとに解読の難易度は指数関数的に増大します。',
|
|
144
|
+
points: [],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
icon: 'mdi:eye-off',
|
|
148
|
+
title: '置き換え文字の神話',
|
|
149
|
+
description: '「a」を「@」に、「e」を「3」に置き換える(リートスピーク)手法は、もはや通用しません。現代の攻撃用辞書には、これらのバリエーションが自動的に含まれています。認識可能な単語の使用は避けましょう。',
|
|
150
|
+
points: [],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
icon: 'mdi:key-chain',
|
|
154
|
+
title: '異なるサイトには異なるキー',
|
|
155
|
+
description: 'メールと掲示板で同じパスワードを使用しており、その掲示板がハッキングされた場合、メールも不正利用されることになります。複雑なパスワードを記憶させるために、パスワードマネージャー(Bitwardenや1Passwordなど)を使用しましょう。',
|
|
156
|
+
points: [],
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'tip',
|
|
162
|
+
title: 'プライバシーを保証',
|
|
163
|
+
html: 'すべての生成処理は <strong>ブラウザ内</strong> で行われます。インターネット経由でパスワードが送信されたり、サーバーに記録されたりすることはありません。ソースコードは公開されており、検証可能です。',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { WithContext, FAQPage, HowTo, SoftwareApplication } from 'schema-dts';
|
|
3
|
+
import type { PasswordGeneratorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const faqData = [
|
|
6
|
+
{
|
|
7
|
+
question: '온라인 비밀번호 생성기를 사용해도 안전한가요?',
|
|
8
|
+
answer: "네, 생성기가 클라이언트 사이드에서 작동하는 한 안전합니다. 당사의 도구는 암호학적으로 안전한 알고리즘을 사용하여 사용자의 브라우저 내에서 로컬로 비밀번호를 생성합니다. 비밀번호는 인터넷을 통해 전송되거나 서버에 저장되지 않습니다.",
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
question: "무엇이 비밀번호를 '해킹 방지' 수준으로 만드나요?",
|
|
12
|
+
answer: '핵심은 엔트로피(무작위성)입니다. 대문자, 소문자, 숫자 및 특수 기호를 혼합하고 최소 12-16자 이상의 길이를 유지하면 현재 기술력으로는 무차별 대입 공격(Brute-force)이 사실상 불가능해집니다.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: '흔한 단어나 날짜를 피해야 하는 이유는 무엇인가요?',
|
|
16
|
+
answer: '해커들은 초당 수백만 개의 단어, 이름 및 날짜 조합을 테스트하는 사전 공격을 사용합니다. 순수하게 무작위인 비밀번호는 언어적 패턴을 따르지 않으므로 훨씬 더 안전합니다.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '모든 비밀번호를 외워야 하나요?',
|
|
20
|
+
answer: '권장하지 않습니다. 이상적인 방법은 비밀번호 관리자(Bitwarden, 1Password 또는 브라우저 내장 도구 등)를 사용하여 길고 무작위인 비밀번호를 저장하는 것입니다. 이렇게 하면 기억해야 할 강력한 마스터 비밀번호는 단 하나뿐입니다.',
|
|
21
|
+
},
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
const howToData = [
|
|
25
|
+
{
|
|
26
|
+
name: '길이 설정',
|
|
27
|
+
text: '슬라이더를 조정하여 비밀번호의 길이를 선택하세요. 현재 보안 표준은 최소 12자 이상을 권장합니다.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: '복잡성 선택',
|
|
31
|
+
text: '비밀번호를 사용할 사이트의 요구 사항에 따라 대문자, 숫자 및 기호 옵션을 선택하세요.',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: '비밀번호 생성',
|
|
35
|
+
text: '생성 버튼을 클릭하세요. 클릭할 때마다 암호화 알고리즘을 기반으로 한 고유하고 높은 엔트로피의 조합이 생성됩니다.',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: '클릭 한 번으로 복사',
|
|
39
|
+
text: '복사 버튼을 사용하여 비밀번호를 보안 방식으로 클립보드에 직접 전송하세요.',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
44
|
+
'@context': 'https://schema.org',
|
|
45
|
+
'@type': 'FAQPage',
|
|
46
|
+
mainEntity: faqData.map((item) => ({
|
|
47
|
+
'@type': 'Question',
|
|
48
|
+
name: item.question,
|
|
49
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
50
|
+
})),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const howToSchema: WithContext<HowTo> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'HowTo',
|
|
56
|
+
name: '안전한 비밀번호 생성기 사용법',
|
|
57
|
+
step: howToData.map((s) => ({ '@type': 'HowToStep', name: s.name, text: s.text })),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
61
|
+
'@context': 'https://schema.org',
|
|
62
|
+
'@type': 'SoftwareApplication',
|
|
63
|
+
name: '안전한 무작위 비밀번호 생성기',
|
|
64
|
+
applicationCategory: 'SecurityApplication',
|
|
65
|
+
operatingSystem: 'Web',
|
|
66
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
67
|
+
description: '강력하고 해킹에 강한 비밀번호를 즉시 생성하세요. 무작위의 안전한 키를 생성하기 위한 무료 사이버 보안 도구입니다.',
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const ui: PasswordGeneratorUI = {
|
|
71
|
+
generating: '생성 중...',
|
|
72
|
+
labelSecurity: '강도',
|
|
73
|
+
labelLength: '길이',
|
|
74
|
+
strengthWeak: '약함',
|
|
75
|
+
strengthFair: '적당함',
|
|
76
|
+
strengthGood: '좋음',
|
|
77
|
+
strengthStrong: '강함',
|
|
78
|
+
strengthUnbreakable: '강철 보안',
|
|
79
|
+
optionUppercase: '대문자',
|
|
80
|
+
optionLowercase: '소문자',
|
|
81
|
+
optionNumbers: '숫자',
|
|
82
|
+
optionSymbols: '기호',
|
|
83
|
+
copyTitle: '복사',
|
|
84
|
+
regenerateTitle: '새로 생성',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<PasswordGeneratorUI> = {
|
|
88
|
+
slug: 'password-generator',
|
|
89
|
+
title: '안전한 무작위 비밀번호 생성기',
|
|
90
|
+
description: '강력하고 해킹에 강한 비밀번호를 즉시 생성하세요. 무작위의 안전한 키를 생성하기 위한 무료 사이버 보안 도구입니다.',
|
|
91
|
+
ui,
|
|
92
|
+
faqTitle: '자주 묻는 질문',
|
|
93
|
+
faq: faqData,
|
|
94
|
+
howTo: howToData,
|
|
95
|
+
bibliographyTitle: '참고 문헌',
|
|
96
|
+
bibliography: [
|
|
97
|
+
{ name: 'Web Cryptography API — MDN Web Docs', url: 'https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API' },
|
|
98
|
+
{ name: 'NIST SP 800-63B: 디지털 ID 가이드라인', url: 'https://pages.nist.gov/800-63-3/sp800-63b.html' },
|
|
99
|
+
{ name: '비밀번호 — 위키백과', url: 'https://ko.wikipedia.org/wiki/%EB%B9%84%EB%B0%80%EB%B2%88%ED%98%B8' },
|
|
100
|
+
{ name: 'Have I Been Pwned — 비밀번호 유출 여부 확인', url: 'https://haveibeenpwned.com/Passwords' },
|
|
101
|
+
],
|
|
102
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
103
|
+
seo: [
|
|
104
|
+
{
|
|
105
|
+
type: 'title',
|
|
106
|
+
text: '해킹 불가능한 비밀번호의 구조',
|
|
107
|
+
level: 2,
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: '비밀번호는 개인 데이터(금융, 의료, 사진 등)와 사이버 범죄자 사이의 유일한 장벽입니다. 하지만 평균적인 사용자는 여전히 "123456"이나 반려동물 이름과 같이 <strong>1초 미만</strong>에 뚫릴 수 있는 예측 가능한 패턴에 의존하고 있습니다.',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'comparative',
|
|
115
|
+
columns: 2,
|
|
116
|
+
items: [
|
|
117
|
+
{
|
|
118
|
+
icon: 'mdi:alert-circle',
|
|
119
|
+
title: '레인보우 테이블의 위험성',
|
|
120
|
+
description: '해커는 비밀번호를 하나씩 추측하지 않습니다. 그들은 흔히 쓰이는 비밀번호의 수백만 개 계산된 해시를 포함하는 거대한 데이터베이스(레인보우 테이블)를 사용합니다. 당신의 비밀번호가 사전에 있거나 유명한 문구라면, 이미 사용하기 전부터 유출된 것이나 다름없습니다.',
|
|
121
|
+
points: [],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
icon: 'mdi:flask',
|
|
125
|
+
title: '해결책: 순수 엔트로피',
|
|
126
|
+
description: '엔트로피는 무질서함이나 예측 불가능성을 측정합니다. 엔트로피(비트)가 높을수록 컴퓨터가 이를 해독하는 데 더 많은 시간이 걸립니다. 이 도구는 예측 가능한 Math.random() 대신 암호학적으로 안전한 난수를 생성하는 브라우저 API인 crypto.getRandomValues()를 사용합니다.',
|
|
127
|
+
points: [],
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'title',
|
|
133
|
+
text: '기본 사이버 보안 원칙',
|
|
134
|
+
level: 2,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
type: 'comparative',
|
|
138
|
+
columns: 3,
|
|
139
|
+
items: [
|
|
140
|
+
{
|
|
141
|
+
icon: 'mdi:ruler',
|
|
142
|
+
title: '복잡성보다 길이',
|
|
143
|
+
description: '소문자로만 구성된 20자 비밀번호는 희귀한 기호가 포함된 8자 비밀번호보다 안전합니다. 수학적으로 한 글자가 추가될 때마다 해독 난이도는 기하급수적으로 증가합니다.',
|
|
144
|
+
points: [],
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
icon: 'mdi:eye-off',
|
|
148
|
+
title: '치환의 신화',
|
|
149
|
+
description: '"a"를 "@"로 바꾸거나 "e"를 "3"으로 바꾸는 방식(Leetspeak)은 아무도 속이지 못합니다. 현대의 공격 사전은 이미 이러한 변형을 자동으로 포함하고 있습니다. 인식 가능한 단어 사용을 피하세요.',
|
|
150
|
+
points: [],
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
icon: 'mdi:key-chain',
|
|
154
|
+
title: '사이트별 고유 비밀번호',
|
|
155
|
+
description: '이메일과 포럼에서 동일한 비밀번호를 사용 중인데 포럼이 해킹당하면, 해커는 이제 당신의 이메일에도 접근할 수 있게 됩니다. 비밀번호 관리자(Bitwarden 또는 1Password 등)를 사용하여 복잡한 비밀번호를 대신 기억하게 하세요.',
|
|
156
|
+
points: [],
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
type: 'tip',
|
|
162
|
+
title: '개인 정보 보호 보장',
|
|
163
|
+
html: '모든 생성 과정은 <strong>브라우저 내에서</strong> 이루어집니다. 비밀번호는 인터넷을 통해 전송되지 않으며 서버에 기록되지 않습니다. 소스 코드는 검증 가능합니다.',
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|