@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.
Files changed (184) hide show
  1. package/package.json +2 -1
  2. package/src/category/i18n/de.ts +172 -0
  3. package/src/category/i18n/id.ts +172 -0
  4. package/src/category/i18n/it.ts +172 -0
  5. package/src/category/i18n/ja.ts +172 -0
  6. package/src/category/i18n/ko.ts +172 -0
  7. package/src/category/i18n/nl.ts +172 -0
  8. package/src/category/i18n/pl.ts +172 -0
  9. package/src/category/i18n/pt.ts +172 -0
  10. package/src/category/i18n/ru.ts +172 -0
  11. package/src/category/i18n/sv.ts +172 -0
  12. package/src/category/i18n/tr.ts +172 -0
  13. package/src/category/i18n/zh.ts +172 -0
  14. package/src/category/index.ts +13 -1
  15. package/src/tests/i18n_coverage.test.ts +36 -0
  16. package/src/tests/locale_completeness.test.ts +1 -1
  17. package/src/tests/slug_uniqueness.test.ts +81 -0
  18. package/src/tests/title_quality.test.ts +0 -1
  19. package/src/tool/date-diff-calculator/i18n/de.ts +132 -0
  20. package/src/tool/date-diff-calculator/i18n/fr.ts +1 -1
  21. package/src/tool/date-diff-calculator/i18n/id.ts +132 -0
  22. package/src/tool/date-diff-calculator/i18n/it.ts +132 -0
  23. package/src/tool/date-diff-calculator/i18n/ja.ts +132 -0
  24. package/src/tool/date-diff-calculator/i18n/ko.ts +132 -0
  25. package/src/tool/date-diff-calculator/i18n/nl.ts +132 -0
  26. package/src/tool/date-diff-calculator/i18n/pl.ts +132 -0
  27. package/src/tool/date-diff-calculator/i18n/pt.ts +132 -0
  28. package/src/tool/date-diff-calculator/i18n/ru.ts +132 -0
  29. package/src/tool/date-diff-calculator/i18n/sv.ts +132 -0
  30. package/src/tool/date-diff-calculator/i18n/tr.ts +132 -0
  31. package/src/tool/date-diff-calculator/i18n/zh.ts +132 -0
  32. package/src/tool/date-diff-calculator/index.ts +12 -0
  33. package/src/tool/drive-direct-link/i18n/de.ts +118 -0
  34. package/src/tool/drive-direct-link/i18n/id.ts +118 -0
  35. package/src/tool/drive-direct-link/i18n/it.ts +118 -0
  36. package/src/tool/drive-direct-link/i18n/ja.ts +118 -0
  37. package/src/tool/drive-direct-link/i18n/ko.ts +118 -0
  38. package/src/tool/drive-direct-link/i18n/nl.ts +118 -0
  39. package/src/tool/drive-direct-link/i18n/pl.ts +118 -0
  40. package/src/tool/drive-direct-link/i18n/pt.ts +118 -0
  41. package/src/tool/drive-direct-link/i18n/ru.ts +118 -0
  42. package/src/tool/drive-direct-link/i18n/sv.ts +118 -0
  43. package/src/tool/drive-direct-link/i18n/tr.ts +118 -0
  44. package/src/tool/drive-direct-link/i18n/zh.ts +118 -0
  45. package/src/tool/drive-direct-link/index.ts +12 -0
  46. package/src/tool/email-list-cleaner/i18n/de.ts +140 -0
  47. package/src/tool/email-list-cleaner/i18n/es.ts +1 -1
  48. package/src/tool/email-list-cleaner/i18n/fr.ts +1 -1
  49. package/src/tool/email-list-cleaner/i18n/id.ts +140 -0
  50. package/src/tool/email-list-cleaner/i18n/it.ts +140 -0
  51. package/src/tool/email-list-cleaner/i18n/ja.ts +140 -0
  52. package/src/tool/email-list-cleaner/i18n/ko.ts +140 -0
  53. package/src/tool/email-list-cleaner/i18n/nl.ts +140 -0
  54. package/src/tool/email-list-cleaner/i18n/pl.ts +140 -0
  55. package/src/tool/email-list-cleaner/i18n/pt.ts +140 -0
  56. package/src/tool/email-list-cleaner/i18n/ru.ts +140 -0
  57. package/src/tool/email-list-cleaner/i18n/sv.ts +140 -0
  58. package/src/tool/email-list-cleaner/i18n/tr.ts +140 -0
  59. package/src/tool/email-list-cleaner/i18n/zh.ts +140 -0
  60. package/src/tool/email-list-cleaner/index.ts +12 -0
  61. package/src/tool/env-badge-spain/i18n/de.ts +153 -0
  62. package/src/tool/env-badge-spain/i18n/es.ts +1 -1
  63. package/src/tool/env-badge-spain/i18n/fr.ts +1 -1
  64. package/src/tool/env-badge-spain/i18n/id.ts +153 -0
  65. package/src/tool/env-badge-spain/i18n/it.ts +153 -0
  66. package/src/tool/env-badge-spain/i18n/ja.ts +153 -0
  67. package/src/tool/env-badge-spain/i18n/ko.ts +153 -0
  68. package/src/tool/env-badge-spain/i18n/nl.ts +153 -0
  69. package/src/tool/env-badge-spain/i18n/pl.ts +153 -0
  70. package/src/tool/env-badge-spain/i18n/pt.ts +153 -0
  71. package/src/tool/env-badge-spain/i18n/ru.ts +153 -0
  72. package/src/tool/env-badge-spain/i18n/sv.ts +153 -0
  73. package/src/tool/env-badge-spain/i18n/tr.ts +153 -0
  74. package/src/tool/env-badge-spain/i18n/zh.ts +153 -0
  75. package/src/tool/env-badge-spain/index.ts +12 -0
  76. package/src/tool/morse-beacon/i18n/de.ts +157 -0
  77. package/src/tool/morse-beacon/i18n/es.ts +1 -1
  78. package/src/tool/morse-beacon/i18n/id.ts +157 -0
  79. package/src/tool/morse-beacon/i18n/it.ts +157 -0
  80. package/src/tool/morse-beacon/i18n/ja.ts +157 -0
  81. package/src/tool/morse-beacon/i18n/ko.ts +157 -0
  82. package/src/tool/morse-beacon/i18n/nl.ts +157 -0
  83. package/src/tool/morse-beacon/i18n/pl.ts +157 -0
  84. package/src/tool/morse-beacon/i18n/pt.ts +157 -0
  85. package/src/tool/morse-beacon/i18n/ru.ts +157 -0
  86. package/src/tool/morse-beacon/i18n/sv.ts +157 -0
  87. package/src/tool/morse-beacon/i18n/tr.ts +157 -0
  88. package/src/tool/morse-beacon/i18n/zh.ts +157 -0
  89. package/src/tool/morse-beacon/index.ts +13 -1
  90. package/src/tool/password-generator/i18n/de.ts +166 -0
  91. package/src/tool/password-generator/i18n/fr.ts +1 -1
  92. package/src/tool/password-generator/i18n/id.ts +166 -0
  93. package/src/tool/password-generator/i18n/it.ts +166 -0
  94. package/src/tool/password-generator/i18n/ja.ts +166 -0
  95. package/src/tool/password-generator/i18n/ko.ts +166 -0
  96. package/src/tool/password-generator/i18n/nl.ts +166 -0
  97. package/src/tool/password-generator/i18n/pl.ts +166 -0
  98. package/src/tool/password-generator/i18n/pt.ts +166 -0
  99. package/src/tool/password-generator/i18n/ru.ts +166 -0
  100. package/src/tool/password-generator/i18n/sv.ts +166 -0
  101. package/src/tool/password-generator/i18n/tr.ts +166 -0
  102. package/src/tool/password-generator/i18n/zh.ts +166 -0
  103. package/src/tool/password-generator/index.ts +13 -1
  104. package/src/tool/routes/i18n/de.ts +157 -0
  105. package/src/tool/routes/i18n/id.ts +157 -0
  106. package/src/tool/routes/i18n/it.ts +157 -0
  107. package/src/tool/routes/i18n/ja.ts +157 -0
  108. package/src/tool/routes/i18n/ko.ts +157 -0
  109. package/src/tool/routes/i18n/nl.ts +157 -0
  110. package/src/tool/routes/i18n/pl.ts +157 -0
  111. package/src/tool/routes/i18n/pt.ts +157 -0
  112. package/src/tool/routes/i18n/ru.ts +157 -0
  113. package/src/tool/routes/i18n/sv.ts +157 -0
  114. package/src/tool/routes/i18n/tr.ts +157 -0
  115. package/src/tool/routes/i18n/zh.ts +157 -0
  116. package/src/tool/routes/index.ts +13 -1
  117. package/src/tool/rule-of-three/i18n/de.ts +171 -0
  118. package/src/tool/rule-of-three/i18n/en.ts +1 -1
  119. package/src/tool/rule-of-three/i18n/id.ts +171 -0
  120. package/src/tool/rule-of-three/i18n/it.ts +171 -0
  121. package/src/tool/rule-of-three/i18n/ja.ts +171 -0
  122. package/src/tool/rule-of-three/i18n/ko.ts +171 -0
  123. package/src/tool/rule-of-three/i18n/nl.ts +171 -0
  124. package/src/tool/rule-of-three/i18n/pl.ts +171 -0
  125. package/src/tool/rule-of-three/i18n/pt.ts +171 -0
  126. package/src/tool/rule-of-three/i18n/ru.ts +171 -0
  127. package/src/tool/rule-of-three/i18n/sv.ts +171 -0
  128. package/src/tool/rule-of-three/i18n/tr.ts +171 -0
  129. package/src/tool/rule-of-three/i18n/zh.ts +171 -0
  130. package/src/tool/rule-of-three/index.ts +13 -1
  131. package/src/tool/seo-content-optimizer/i18n/de.ts +136 -0
  132. package/src/tool/seo-content-optimizer/i18n/id.ts +136 -0
  133. package/src/tool/seo-content-optimizer/i18n/it.ts +136 -0
  134. package/src/tool/seo-content-optimizer/i18n/ja.ts +136 -0
  135. package/src/tool/seo-content-optimizer/i18n/ko.ts +136 -0
  136. package/src/tool/seo-content-optimizer/i18n/nl.ts +136 -0
  137. package/src/tool/seo-content-optimizer/i18n/pl.ts +136 -0
  138. package/src/tool/seo-content-optimizer/i18n/pt.ts +136 -0
  139. package/src/tool/seo-content-optimizer/i18n/ru.ts +136 -0
  140. package/src/tool/seo-content-optimizer/i18n/sv.ts +136 -0
  141. package/src/tool/seo-content-optimizer/i18n/tr.ts +136 -0
  142. package/src/tool/seo-content-optimizer/i18n/zh.ts +136 -0
  143. package/src/tool/seo-content-optimizer/index.ts +12 -0
  144. package/src/tool/speed-reader/i18n/de.ts +152 -0
  145. package/src/tool/speed-reader/i18n/es.ts +1 -1
  146. package/src/tool/speed-reader/i18n/id.ts +152 -0
  147. package/src/tool/speed-reader/i18n/it.ts +152 -0
  148. package/src/tool/speed-reader/i18n/ja.ts +152 -0
  149. package/src/tool/speed-reader/i18n/ko.ts +152 -0
  150. package/src/tool/speed-reader/i18n/nl.ts +152 -0
  151. package/src/tool/speed-reader/i18n/pl.ts +152 -0
  152. package/src/tool/speed-reader/i18n/pt.ts +152 -0
  153. package/src/tool/speed-reader/i18n/ru.ts +152 -0
  154. package/src/tool/speed-reader/i18n/sv.ts +152 -0
  155. package/src/tool/speed-reader/i18n/tr.ts +152 -0
  156. package/src/tool/speed-reader/i18n/zh.ts +152 -0
  157. package/src/tool/speed-reader/index.ts +12 -0
  158. package/src/tool/text-pixel-calculator/i18n/de.ts +133 -0
  159. package/src/tool/text-pixel-calculator/i18n/id.ts +133 -0
  160. package/src/tool/text-pixel-calculator/i18n/it.ts +133 -0
  161. package/src/tool/text-pixel-calculator/i18n/ja.ts +133 -0
  162. package/src/tool/text-pixel-calculator/i18n/ko.ts +133 -0
  163. package/src/tool/text-pixel-calculator/i18n/nl.ts +133 -0
  164. package/src/tool/text-pixel-calculator/i18n/pl.ts +133 -0
  165. package/src/tool/text-pixel-calculator/i18n/pt.ts +133 -0
  166. package/src/tool/text-pixel-calculator/i18n/ru.ts +133 -0
  167. package/src/tool/text-pixel-calculator/i18n/sv.ts +133 -0
  168. package/src/tool/text-pixel-calculator/i18n/tr.ts +133 -0
  169. package/src/tool/text-pixel-calculator/i18n/zh.ts +133 -0
  170. package/src/tool/text-pixel-calculator/index.ts +12 -0
  171. package/src/tool/whatsapp-link/i18n/de.ts +128 -0
  172. package/src/tool/whatsapp-link/i18n/es.ts +1 -1
  173. package/src/tool/whatsapp-link/i18n/id.ts +128 -0
  174. package/src/tool/whatsapp-link/i18n/it.ts +128 -0
  175. package/src/tool/whatsapp-link/i18n/ja.ts +128 -0
  176. package/src/tool/whatsapp-link/i18n/ko.ts +128 -0
  177. package/src/tool/whatsapp-link/i18n/nl.ts +128 -0
  178. package/src/tool/whatsapp-link/i18n/pl.ts +128 -0
  179. package/src/tool/whatsapp-link/i18n/pt.ts +128 -0
  180. package/src/tool/whatsapp-link/i18n/ru.ts +128 -0
  181. package/src/tool/whatsapp-link/i18n/sv.ts +128 -0
  182. package/src/tool/whatsapp-link/i18n/tr.ts +128 -0
  183. package/src/tool/whatsapp-link/i18n/zh.ts +128 -0
  184. 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: 'Is het veilig om een online wachtwoordgenerator te gebruiken?',
8
+ answer: "Ja, zolang de generator aan de clientzijde werkt. Onze tool genereert wachtwoorden lokaal in uw browser met behulp van cryptografisch veilige algoritmen. Uw wachtwoord wordt nooit over het internet verzonden of op een server opgeslagen.",
9
+ },
10
+ {
11
+ question: "Wat maakt een wachtwoord 'hackerbestendig'?",
12
+ answer: 'De sleutel is entropie (willekeur). Een mix van hoofdletters, kleine letters, cijfers en speciale symbolen in combinatie met een minimale lengte van 12-16 tekens maakt een brute-force aanval met de huidige technologie praktisch onmogelijk.',
13
+ },
14
+ {
15
+ question: 'Waarom moet ik gewone woorden of datums vermijden?',
16
+ answer: 'Hackers gebruiken woordenboekaanvallen die miljoenen woorden, namen en datumcombinaties per seconde testen. Puur willekeurige wachtwoorden volgen geen taalkundige patronen, waardoor ze veel veiliger zijn.',
17
+ },
18
+ {
19
+ question: 'Moet ik al mijn wachtwoorden onthouden?',
20
+ answer: 'Niet aanbevolen. De ideale aanpak is om een wachtwoordmanager te gebruiken (zoals Bitwarden, 1Password of de ingebouwde manager in uw browser) om deze lange, willekeurige wachtwoorden op te slaan, zodat u slechts één sterk hoofdwachtwoord hoeft te onthouden.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ {
26
+ name: 'Stel de lengte in',
27
+ text: 'Pas de schuifregelaar aan om te kiezen hoeveel tekens uw wachtwoord zal hebben. De huidige beveiligingsnormen raden er minimaal 12 aan.',
28
+ },
29
+ {
30
+ name: 'Kies complexiteit',
31
+ text: 'Vink de opties voor hoofdletters, cijfers en symbolen aan volgens de vereisten van de site waar u het wachtwoord gaat gebruiken.',
32
+ },
33
+ {
34
+ name: 'Genereer het wachtwoord',
35
+ text: 'Klik op de knop Genereren. Elke klik creëert een unieke combinatie met een hoge entropie op basis van cryptografische algoritmen.',
36
+ },
37
+ {
38
+ name: 'Kopiëren met één klik',
39
+ text: 'Gebruik de kopieerknop om het wachtwoord op een veilige manier rechtstreeks naar uw klembord te sturen.',
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: 'Hoe de veilige wachtwoordgenerator te gebruiken',
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: 'Veilige willekeurige wachtwoordgenerator',
64
+ applicationCategory: 'SecurityApplication',
65
+ operatingSystem: 'Web',
66
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
67
+ description: 'Maak direct sterke, hackerbestendige wachtwoorden. Gratis cybersecurity-tool om willekeurige, veilige sleutels te genereren.',
68
+ };
69
+
70
+ const ui: PasswordGeneratorUI = {
71
+ generating: 'Genereren...',
72
+ labelSecurity: 'Sterkte',
73
+ labelLength: 'Lengte',
74
+ strengthWeak: 'Zwak',
75
+ strengthFair: 'Redelijk',
76
+ strengthGood: 'Goed',
77
+ strengthStrong: 'Sterk',
78
+ strengthUnbreakable: 'Onbreekbaar',
79
+ optionUppercase: 'Hoofdletters',
80
+ optionLowercase: 'Kleine letters',
81
+ optionNumbers: 'Cijfers',
82
+ optionSymbols: 'Symbolen',
83
+ copyTitle: 'Kopiëren',
84
+ regenerateTitle: 'Nieuwe genereren',
85
+ };
86
+
87
+ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
88
+ slug: 'wachtwoord-generator',
89
+ title: 'Veilige willekeurige wachtwoordgenerator',
90
+ description: 'Maak direct sterke, hackerbestendige wachtwoorden. Gratis cybersecurity-tool om willekeurige, veilige sleutels te genereren.',
91
+ ui,
92
+ faqTitle: 'Veelgestelde Vragen',
93
+ faq: faqData,
94
+ howTo: howToData,
95
+ bibliographyTitle: 'Referenties',
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: 'Wachtwoord — Wikipedia', url: 'https://nl.wikipedia.org/wiki/Wachtwoord' },
100
+ { name: 'Have I Been Pwned — Controleer of uw wachtwoord is uitgelekt', url: 'https://haveibeenpwned.com/Passwords' },
101
+ ],
102
+ schemas: [faqSchema, howToSchema, appSchema],
103
+ seo: [
104
+ {
105
+ type: 'title',
106
+ text: 'De anatomie van een onbreekbaar wachtwoord',
107
+ level: 2,
108
+ },
109
+ {
110
+ type: 'paragraph',
111
+ html: 'Uw wachtwoord is de enige barrière tussen uw persoonlijke gegevens (bankzaken, medische gegevens, foto\'s) und een cybercrimineel. Toch vertrouwt de gemiddelde gebruiker nog steeds op voorspelbare patronen zoals "123456" of namen van huisdieren, die in <strong>minder dan een seconde</strong> kunnen worden gekraakt.',
112
+ },
113
+ {
114
+ type: 'comparative',
115
+ columns: 2,
116
+ items: [
117
+ {
118
+ icon: 'mdi:alert-circle',
119
+ title: 'Het gevaar van Rainbow Tables',
120
+ description: 'Hackers raden uw wachtwoord niet poging voor poging. Ze gebruiken enorme databases (Rainbow Tables) met miljoenen vooraf berekende hashes van veelgebruikte wachtwoorden. Als uw wachtwoord in het woordenboek staat of een bekende zin is, was het al gecompromitteerd voordat u het begon te gebruiken.',
121
+ points: [],
122
+ },
123
+ {
124
+ icon: 'mdi:flask',
125
+ title: 'De oplossing: Pure Entropie',
126
+ description: 'Entropie meet wanorde of onvoorspelbaarheid. Hoe hoger de entropie (bits), hoe meer tijd een computer nodig heeft om het te kraken. Deze tool maakt gebruik van crypto.getRandomValues(), een browser-API die cryptografisch veilige willekeurige getallen genereert, in tegenstelling tot Math.random() dat voorspelbaar is.',
127
+ points: [],
128
+ },
129
+ ],
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Basisprincipes van cybersecurity',
134
+ level: 2,
135
+ },
136
+ {
137
+ type: 'comparative',
138
+ columns: 3,
139
+ items: [
140
+ {
141
+ icon: 'mdi:ruler',
142
+ title: 'Lengte boven complexiteit',
143
+ description: 'Een wachtwoord van 20 tekens met alleen kleine letters is veiliger dan een wachtwoord van 8 tekens met zeldzame symbolen. Wiskundig gezien vermenigvuldigt elk extra teken de moeilijkheidsgraad exponentieel.',
144
+ points: [],
145
+ },
146
+ {
147
+ icon: 'mdi:eye-off',
148
+ title: 'De mythe van vervanging',
149
+ description: 'Het vervangen van "a" door "@" of "e" door "3" (Leetspeak) houdt niemand voor de gek. Moderne aanvalswoordenboeken bevatten deze variaties al automatisch. Vermijd het gebruik van herkenbare woorden.',
150
+ points: [],
151
+ },
152
+ {
153
+ icon: 'mdi:key-chain',
154
+ title: 'Verschillende site, verschillende sleutel',
155
+ description: 'Als u hetzelfde wachtwoord gebruikt voor uw e-mail en een forum, en het forum wordt gehackt, hebben ze nu toegang tot uw e-mail. Gebruik een wachtwoordmanager (zoals Bitwarden of 1Password) om complexe wachtwoorden voor u te onthouden.',
156
+ points: [],
157
+ },
158
+ ],
159
+ },
160
+ {
161
+ type: 'tip',
162
+ title: 'Privacy gegarandeerd',
163
+ html: 'De gehele generatie vindt plaats <strong>in uw browser</strong>. Er wordt geen wachtwoord over het internet verzonden of op een server gelogd. De broncode is controleerbaar.',
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: 'Czy korzystanie z internetowego generatora haseł jest bezpieczne?',
8
+ answer: "Tak, o ile generator działa po stronie klienta. Nasze narzędzie generuje hasła lokalnie w Twojej przeglądarce przy użyciu kryptograficznie bezpiecznych algorytmów. Twoje hasło nigdy nie jest przesyłane przez Internet ani przechowywane na żadnym serwerze.",
9
+ },
10
+ {
11
+ question: "Co sprawia, że hasło jest 'odporne na hakerów'?",
12
+ answer: 'Kluczem jest entropia (losowość). Połączenie wielkich i małych liter, cyfr i symboli specjalnych w połączeniu z minimalną długością 12-16 znaków sprawia, że atak metodą brute-force jest praktycznie niemożliwy przy obecnej technologii.',
13
+ },
14
+ {
15
+ question: 'Dlaczego należy unikać typowych słów lub dat?',
16
+ answer: 'Hakerzy stosują ataki słownikowe, które testują miliony słów, imion i kombinacji dat na sekundę. Całkowicie losowe hasła nie opierają się na żadnych wzorcach językowych, co czyni je znacznie bezpieczniejszymi.',
17
+ },
18
+ {
19
+ question: 'Czy powinienem zapamiętać wszystkie swoje hasła?',
20
+ answer: 'Nie jest to zalecane. Idealnym rozwiązaniem jest użycie menedżera haseł (np. Bitwarden, 1Password lub wbudowanego w przeglądarkę) do przechowywania tych długich, losowych haseł, dzięki czemu musisz zapamiętać tylko jedno silne hasło główne.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ {
26
+ name: 'Ustaw długość',
27
+ text: 'Użyj suwaka, aby wybrać liczbę znaków w haśle. Obecne standardy bezpieczeństwa zalecają co najmniej 12 znaków.',
28
+ },
29
+ {
30
+ name: 'Wybierz złożoność',
31
+ text: 'Zaznacz opcje wielkich liter, cyfr i symboli zgodnie z wymaganiami witryny, na której będziesz używać hasła.',
32
+ },
33
+ {
34
+ name: 'Wygeneruj hasło',
35
+ text: 'Kliknij przycisk generowania. Każde kliknięcie tworzy unikalną kombinację o wysokiej entropii w oparciu o algorytmy kryptograficzne.',
36
+ },
37
+ {
38
+ name: 'Kopiuj jednym kliknięciem',
39
+ text: 'Użyj przycisku kopiowania, aby w bezpieczny sposób przesłać hasło bezpośrednio do schowka.',
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: 'Jak korzystać z bezpiecznego generatora haseł',
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: 'Generator bezpiecznych losowych haseł',
64
+ applicationCategory: 'SecurityApplication',
65
+ operatingSystem: 'Web',
66
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
67
+ description: 'Błyskawicznie twórz silne, odporne na hakerów hasła. Darmowe narzędzie do cyberbezpieczeństwa do generowania losowych, bezpiecznych kluczy.',
68
+ };
69
+
70
+ const ui: PasswordGeneratorUI = {
71
+ generating: 'Generowanie...',
72
+ labelSecurity: 'Siła',
73
+ labelLength: 'Długość',
74
+ strengthWeak: 'Słabe',
75
+ strengthFair: 'Dostateczne',
76
+ strengthGood: 'Dobre',
77
+ strengthStrong: 'Silne',
78
+ strengthUnbreakable: 'Nie do złamania',
79
+ optionUppercase: 'Wielkie litery',
80
+ optionLowercase: 'Małe litery',
81
+ optionNumbers: 'Cyfry',
82
+ optionSymbols: 'Symbole',
83
+ copyTitle: 'Kopiuj',
84
+ regenerateTitle: 'Wygeneruj nowe',
85
+ };
86
+
87
+ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
88
+ slug: 'generator-hasel',
89
+ title: 'Generator bezpiecznych losowych haseł',
90
+ description: 'Błyskawicznie twórz silne, odporne na hakerów hasła. Darmowe narzędzie do cyberbezpieczeństwa do generowania losowych, bezpiecznych kluczy.',
91
+ ui,
92
+ faqTitle: 'Często zadawane pytania',
93
+ faq: faqData,
94
+ howTo: howToData,
95
+ bibliographyTitle: 'Źródła',
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: 'Hasło — Wikipedia', url: 'https://pl.wikipedia.org/wiki/Has%C5%82o' },
100
+ { name: 'Have I Been Pwned — Sprawdź, czy Twoje hasło zostało ujawnione', url: 'https://haveibeenpwned.com/Passwords' },
101
+ ],
102
+ schemas: [faqSchema, howToSchema, appSchema],
103
+ seo: [
104
+ {
105
+ type: 'title',
106
+ text: 'Anatomia hasła nie do złamania',
107
+ level: 2,
108
+ },
109
+ {
110
+ type: 'paragraph',
111
+ html: 'Twoje hasło to jedyna barierą między Twoimi danymi osobowymi (bankowość, dokumentacja medyczna, zdjęcia) a cyberprzestępcą. Mimo to przeciętny użytkownik wciąż polega na przewidywalnych wzorcach, takich jak „123456” lub imiona zwierząt, które można złamać w <strong>mniej niż sekundę</strong>.',
112
+ },
113
+ {
114
+ type: 'comparative',
115
+ columns: 2,
116
+ items: [
117
+ {
118
+ icon: 'mdi:alert-circle',
119
+ title: 'Zagrożenie ze strony Rainbow Tables',
120
+ description: 'Hakerzy nie odgadują hasła po jednej próbie. Korzystają z ogromnych baz danych (Rainbow Tables) zawierających miliony wstępnie obliczonych skrótów (hashy) typowych haseł. Jeśli Twoje hasło znajduje się w słowniku lub jest znanym zwrotem, zostało już skompromitowane, zanim w ogóle zacząłeś go używać.',
121
+ points: [],
122
+ },
123
+ {
124
+ icon: 'mdi:flask',
125
+ title: 'Rozwiązanie: Czysta entropia',
126
+ description: 'Entropia mierzy nieporządek lub nieprzewidywalność. Im wyższa entropia (liczba bitów), tym więcej czasu komputer potrzebuje na jej złamanie. To narzędzie wykorzystuje crypto.getRandomValues() — interfejs API przeglądarki, który generuje kryptograficznie bezpieczne liczby losowe, w przeciwieństwie do Math.random(), który jest przewidywalny.',
127
+ points: [],
128
+ },
129
+ ],
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Podstawowe zasady cyberbezpieczeństwa',
134
+ level: 2,
135
+ },
136
+ {
137
+ type: 'comparative',
138
+ columns: 3,
139
+ items: [
140
+ {
141
+ icon: 'mdi:ruler',
142
+ title: 'Długość ważniejsza niż złożoność',
143
+ description: '20-znakowe hasło składające się wyłącznie z małych liter jest bezpieczniejsze niż 8-znakowe hasło z rzadkimi symbolami. Matematycznie rzecz biorąc, każdy dodatkowy znak potęguje trudność złamania hasła.',
144
+ points: [],
145
+ },
146
+ {
147
+ icon: 'mdi:eye-off',
148
+ title: 'Mit podstawiania znaków',
149
+ description: 'Zastępowanie „a” znakiem „@” lub „e” cyfrą „3” (Leetspeak) nikogo nie zwiedzie. Nowoczesne słowniki ataków automatycznie uwzględniają te warianty. Unikaj używania łatwo rozpoznawalnych słów.',
150
+ points: [],
151
+ },
152
+ {
153
+ icon: 'mdi:key-chain',
154
+ title: 'Inna strona, inny klucz',
155
+ description: 'Jeśli używasz tego samego hasła do e-maila i na forum, a forum zostanie zhakowane, przestępcy mogą uzyskać dostęp do Twojej skrzynki. Użyj menedżera haseł (np. Bitwarden lub 1Password), aby zapamiętać za Ciebie złożone hasła.',
156
+ points: [],
157
+ },
158
+ ],
159
+ },
160
+ {
161
+ type: 'tip',
162
+ title: 'Gwarancja prywatności',
163
+ html: 'Cały proces generowania odbywa się <strong>w Twojej przeglądarce</strong>. Hasło nie jest przesyłane przez Internet ani rejestrowane na żadnym serwerze. Kod źródłowy jest jawny.',
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: 'É seguro utilizar um gerador de passwords online?',
8
+ answer: "Sim, desde que o gerador seja do lado do cliente (client-side). A nossa ferramenta gera passwords localmente no seu navegador utilizando algoritmos criptograficamente seguros. A sua password nunca é enviada pela internet nem armazenada em qualquer servidor.",
9
+ },
10
+ {
11
+ question: "O que torna uma password 'à prova de hackers'?",
12
+ answer: 'A chave é a entropia (aleatoriedade). Uma mistura de maiúsculas, minúsculas, números e símbolos especiais combinada com um comprimento mínimo de 12-16 caracteres torna um ataque de força bruta praticamente impossível com a tecnologia atual.',
13
+ },
14
+ {
15
+ question: 'Porque devo evitar palavras comuns ou datas?',
16
+ answer: 'Os hackers utilizam ataques de dicionário que testam milhões de palavras, nomes e combinações de datas por segundo. Passwords puramente aleatórias não seguem padrões linguísticos, o que as torna muito mais seguras.',
17
+ },
18
+ {
19
+ question: 'Devo memorizar todas as minhas passwords?',
20
+ answer: 'Não é recomendado. A abordagem ideal é utilizar um gestor de passwords (como o Bitwarden, 1Password ou o integrado no seu navegador) para armazenar estas passwords longas e aleatórias, para que só precise de se lembrar de uma password mestre forte.',
21
+ },
22
+ ];
23
+
24
+ const howToData = [
25
+ {
26
+ name: 'Defina o comprimento',
27
+ text: 'Ajuste a barra deslizante para escolher quantos caracteres terá a sua password. Os padrões de segurança atuais recomendam pelo menos 12.',
28
+ },
29
+ {
30
+ name: 'Escolha a complexidade',
31
+ text: 'Marque as opções de maiúsculas, números e símbolos de acordo com os requisitos do site onde irá utilizar a password.',
32
+ },
33
+ {
34
+ name: 'Gere a password',
35
+ text: 'Clique no botão gerar. Cada clique cria uma combinação única e de alta entropia baseada em algoritmos criptográficos.',
36
+ },
37
+ {
38
+ name: 'Copie com um clique',
39
+ text: 'Utilize o botão de copiar para enviar a password diretamente para a sua área de transferência de forma segura.',
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: 'Como utilizar o gerador de passwords seguras',
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: 'Gerador de Passwords Aleatórias Seguras',
64
+ applicationCategory: 'SecurityApplication',
65
+ operatingSystem: 'Web',
66
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
67
+ description: 'Crie passwords fortes e à prova de hackers instantaneamente. Ferramenta de cibersegurança gratuita para gerar chaves aleatórias e seguras.',
68
+ };
69
+
70
+ const ui: PasswordGeneratorUI = {
71
+ generating: 'A gerar...',
72
+ labelSecurity: 'Força',
73
+ labelLength: 'Comprimento',
74
+ strengthWeak: 'Fraca',
75
+ strengthFair: 'Razoável',
76
+ strengthGood: 'Boa',
77
+ strengthStrong: 'Forte',
78
+ strengthUnbreakable: 'Inviolável',
79
+ optionUppercase: 'Maiúsculas',
80
+ optionLowercase: 'Minúsculas',
81
+ optionNumbers: 'Números',
82
+ optionSymbols: 'Símbolos',
83
+ copyTitle: 'Copiar',
84
+ regenerateTitle: 'Gerar Nova',
85
+ };
86
+
87
+ export const content: ToolLocaleContent<PasswordGeneratorUI> = {
88
+ slug: 'gerador-senhas',
89
+ title: 'Gerador de Passwords Aleatórias Seguras',
90
+ description: 'Crie passwords fortes e à prova de hackers instantaneamente. Ferramenta de cibersegurança gratuita para gerar chaves aleatórias e seguras.',
91
+ ui,
92
+ faqTitle: 'Perguntas Frequentes',
93
+ faq: faqData,
94
+ howTo: howToData,
95
+ bibliographyTitle: 'Referências',
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 — Wikipédia', url: 'https://pt.wikipedia.org/wiki/Palavra-passe' },
100
+ { name: 'Have I Been Pwned — Verifique se a sua password foi exposta', url: 'https://haveibeenpwned.com/Passwords' },
101
+ ],
102
+ schemas: [faqSchema, howToSchema, appSchema],
103
+ seo: [
104
+ {
105
+ type: 'title',
106
+ text: 'A Anatomia de uma Password Inviolável',
107
+ level: 2,
108
+ },
109
+ {
110
+ type: 'paragraph',
111
+ html: 'A sua password é a única barreira entre os seus dados pessoais (bancários, médicos, fotos) e um cibercriminoso. No entanto, o utilizador médio ainda confia em padrões previsíveis como "123456" ou nomes de animais de estimação, que podem ser quebrados em <strong>menos de um segundo</strong>.',
112
+ },
113
+ {
114
+ type: 'comparative',
115
+ columns: 2,
116
+ items: [
117
+ {
118
+ icon: 'mdi:alert-circle',
119
+ title: 'O Perigo das Rainbow Tables',
120
+ description: 'Os hackers não adivinham a sua password uma tentativa de cada vez. Eles utilizam bases de dados massivas (Rainbow Tables) contendo milhões de hashes pré-calculados de passwords comuns. Se a sua password estiver no dicionário ou for uma frase famosa, ela já estava comprometida antes de começar a usá-la.',
121
+ points: [],
122
+ },
123
+ {
124
+ icon: 'mdi:flask',
125
+ title: 'A Solução: Entropia Pura',
126
+ description: 'A entropia mede a desordem ou a imprevisibilidade. Quanto maior a entropia (bits), mais tempo um computador necessita para a quebrar. Esta ferramenta utiliza crypto.getRandomValues(), uma API do navegador que gera números aleatórios criptograficamente seguros, ao contrário de Math.random() que é previsível.',
127
+ points: [],
128
+ },
129
+ ],
130
+ },
131
+ {
132
+ type: 'title',
133
+ text: 'Princípios Básicos de Cibersegurança',
134
+ level: 2,
135
+ },
136
+ {
137
+ type: 'comparative',
138
+ columns: 3,
139
+ items: [
140
+ {
141
+ icon: 'mdi:ruler',
142
+ title: 'Comprimento acima da Complexidade',
143
+ description: 'Uma password de 20 caracteres apenas com minúsculas é mais segura do que uma de 8 caracteres com símbolos raros. Matematicamente, cada carácter extra multiplica a dificuldade exponencialmente.',
144
+ points: [],
145
+ },
146
+ {
147
+ icon: 'mdi:eye-off',
148
+ title: 'O Mito da Substituição',
149
+ description: 'Substituir "a" por "@" ou "e" por "3" (Leetspeak) não engana ninguém. Os dicionários de ataque modernos já incluem estas variações automaticamente. Evite utilizar palavras reconhecíveis.',
150
+ points: [],
151
+ },
152
+ {
153
+ icon: 'mdi:key-chain',
154
+ title: 'Site Diferente, Chave Diferente',
155
+ description: 'Se utilizar a mesma password para o seu e-mail e para um fórum, e o fórum for hackeado, eles têm agora acesso ao seu e-mail. Utilize um Gestor de Passwords (como o Bitwarden ou 1Password) para memorizar passwords complexas por si.',
156
+ points: [],
157
+ },
158
+ ],
159
+ },
160
+ {
161
+ type: 'tip',
162
+ title: 'Privacidade garantida',
163
+ html: 'Toda a geração acontece <strong>no seu navegador</strong>. Nenhuma password é transmitida pela internet ou registada em qualquer servidor. O código-fonte é auditável.',
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: 'Хакеры используют словарные атаки, которые проверяют миллионы слов, имен и комбинаций дат в секунду. Чисто случайные пароли не следуют лингвистическим шаблонам, что делает их гораздо более безопасными.',
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: 'generator-paroley',
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: 'Пароль — Википедия', url: 'https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%BE%D0%BB%D1%8C' },
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>менее чем за секунду</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: 'Энтропия измеряет хаотичность или непредсказуемость. Чем выше энтропия (бит), тем больше времени требуется компьютеру, чтобы ее взломать. Этот инструмент использует crypto.getRandomValues(), API браузера, который генерирует криптографически безопасные случайные числа, в отличие от Math.random(), который предсказуем.',
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
+ };