@jjlmoya/utils-developer 1.3.0 → 1.5.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 +34 -0
- package/src/category/i18n/id.ts +34 -0
- package/src/category/i18n/it.ts +34 -0
- package/src/category/i18n/ja.ts +34 -0
- package/src/category/i18n/ko.ts +34 -0
- package/src/category/i18n/nl.ts +34 -0
- package/src/category/i18n/pl.ts +34 -0
- package/src/category/i18n/pt.ts +34 -0
- package/src/category/i18n/ru.ts +34 -0
- package/src/category/i18n/sv.ts +34 -0
- package/src/category/i18n/tr.ts +34 -0
- package/src/category/i18n/zh.ts +34 -0
- package/src/category/index.ts +13 -1
- package/src/index.ts +12 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/i18n_coverage.test.ts +36 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/slug_uniqueness.test.ts +81 -0
- package/src/tool/aspectRatio/i18n/de.ts +177 -0
- package/src/tool/aspectRatio/i18n/id.ts +177 -0
- package/src/tool/aspectRatio/i18n/it.ts +177 -0
- package/src/tool/aspectRatio/i18n/ja.ts +178 -0
- package/src/tool/aspectRatio/i18n/ko.ts +178 -0
- package/src/tool/aspectRatio/i18n/nl.ts +178 -0
- package/src/tool/aspectRatio/i18n/pl.ts +177 -0
- package/src/tool/aspectRatio/i18n/pt.ts +177 -0
- package/src/tool/aspectRatio/i18n/ru.ts +177 -0
- package/src/tool/aspectRatio/i18n/sv.ts +177 -0
- package/src/tool/aspectRatio/i18n/tr.ts +177 -0
- package/src/tool/aspectRatio/i18n/zh.ts +178 -0
- package/src/tool/aspectRatio/index.ts +15 -7
- package/src/tool/calculadoraTiempoDatos/i18n/de.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/id.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/it.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ja.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ko.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/nl.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/pl.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/pt.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/ru.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/i18n/sv.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/tr.ts +150 -0
- package/src/tool/calculadoraTiempoDatos/i18n/zh.ts +151 -0
- package/src/tool/calculadoraTiempoDatos/index.ts +15 -7
- package/src/tool/colorConverter/i18n/de.ts +126 -0
- package/src/tool/colorConverter/i18n/id.ts +126 -0
- package/src/tool/colorConverter/i18n/it.ts +126 -0
- package/src/tool/colorConverter/i18n/ja.ts +127 -0
- package/src/tool/colorConverter/i18n/ko.ts +127 -0
- package/src/tool/colorConverter/i18n/nl.ts +126 -0
- package/src/tool/colorConverter/i18n/pl.ts +126 -0
- package/src/tool/colorConverter/i18n/pt.ts +126 -0
- package/src/tool/colorConverter/i18n/ru.ts +126 -0
- package/src/tool/colorConverter/i18n/sv.ts +126 -0
- package/src/tool/colorConverter/i18n/tr.ts +126 -0
- package/src/tool/colorConverter/i18n/zh.ts +127 -0
- package/src/tool/colorConverter/index.ts +15 -7
- package/src/tool/conversorExcelCsvHtml/i18n/de.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/id.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/it.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ja.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ko.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/i18n/nl.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/pl.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/pt.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/ru.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/sv.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/tr.ts +129 -0
- package/src/tool/conversorExcelCsvHtml/i18n/zh.ts +130 -0
- package/src/tool/conversorExcelCsvHtml/index.ts +15 -7
- package/src/tool/cronGenerator/i18n/de.ts +192 -0
- package/src/tool/cronGenerator/i18n/es.ts +2 -1
- package/src/tool/cronGenerator/i18n/fr.ts +2 -1
- package/src/tool/cronGenerator/i18n/id.ts +192 -0
- package/src/tool/cronGenerator/i18n/it.ts +192 -0
- package/src/tool/cronGenerator/i18n/ja.ts +192 -0
- package/src/tool/cronGenerator/i18n/ko.ts +192 -0
- package/src/tool/cronGenerator/i18n/nl.ts +192 -0
- package/src/tool/cronGenerator/i18n/pl.ts +192 -0
- package/src/tool/cronGenerator/i18n/pt.ts +192 -0
- package/src/tool/cronGenerator/i18n/ru.ts +192 -0
- package/src/tool/cronGenerator/i18n/sv.ts +192 -0
- package/src/tool/cronGenerator/i18n/tr.ts +192 -0
- package/src/tool/cronGenerator/i18n/zh.ts +192 -0
- package/src/tool/cronGenerator/index.ts +15 -7
- package/src/tool/cssSpecificityCalculator/i18n/de.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/id.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/it.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/ja.ts +169 -0
- package/src/tool/cssSpecificityCalculator/i18n/ko.ts +169 -0
- package/src/tool/cssSpecificityCalculator/i18n/nl.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/pl.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/pt.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/ru.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/sv.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/tr.ts +168 -0
- package/src/tool/cssSpecificityCalculator/i18n/zh.ts +169 -0
- package/src/tool/cssSpecificityCalculator/index.ts +15 -7
- package/src/tool/cssToInlineConverter/i18n/de.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/id.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/it.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/ja.ts +161 -0
- package/src/tool/cssToInlineConverter/i18n/ko.ts +161 -0
- package/src/tool/cssToInlineConverter/i18n/nl.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/pl.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/pt.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/ru.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/sv.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/tr.ts +160 -0
- package/src/tool/cssToInlineConverter/i18n/zh.ts +161 -0
- package/src/tool/cssToInlineConverter/index.ts +15 -7
- package/src/tool/duplicateCssRemover/i18n/de.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/id.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/it.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/ja.ts +168 -0
- package/src/tool/duplicateCssRemover/i18n/ko.ts +168 -0
- package/src/tool/duplicateCssRemover/i18n/nl.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/pl.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/pt.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/ru.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/sv.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/tr.ts +167 -0
- package/src/tool/duplicateCssRemover/i18n/zh.ts +168 -0
- package/src/tool/duplicateCssRemover/index.ts +15 -7
- package/src/tool/generadorSecurityTxt/i18n/de.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/id.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/it.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ja.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ko.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/nl.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/pl.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/pt.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/ru.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/sv.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/tr.ts +174 -0
- package/src/tool/generadorSecurityTxt/i18n/zh.ts +174 -0
- package/src/tool/generadorSecurityTxt/index.ts +15 -7
- package/src/tool/hashGenerator/i18n/de.ts +119 -0
- package/src/tool/hashGenerator/i18n/id.ts +119 -0
- package/src/tool/hashGenerator/i18n/it.ts +118 -0
- package/src/tool/hashGenerator/i18n/ja.ts +119 -0
- package/src/tool/hashGenerator/i18n/ko.ts +119 -0
- package/src/tool/hashGenerator/i18n/nl.ts +119 -0
- package/src/tool/hashGenerator/i18n/pl.ts +118 -0
- package/src/tool/hashGenerator/i18n/pt.ts +118 -0
- package/src/tool/hashGenerator/i18n/ru.ts +119 -0
- package/src/tool/hashGenerator/i18n/sv.ts +119 -0
- package/src/tool/hashGenerator/i18n/tr.ts +118 -0
- package/src/tool/hashGenerator/i18n/zh.ts +119 -0
- package/src/tool/hashGenerator/index.ts +15 -7
- package/src/tool/inspectorCertificadosSsl/i18n/de.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/id.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/it.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ja.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ko.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/nl.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/pl.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/pt.ts +214 -0
- package/src/tool/inspectorCertificadosSsl/i18n/ru.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/sv.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/tr.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/i18n/zh.ts +215 -0
- package/src/tool/inspectorCertificadosSsl/index.ts +24 -0
- package/src/tool/jsonFormatter/i18n/de.ts +157 -0
- package/src/tool/jsonFormatter/i18n/es.ts +2 -1
- package/src/tool/jsonFormatter/i18n/fr.ts +2 -1
- package/src/tool/jsonFormatter/i18n/id.ts +157 -0
- package/src/tool/jsonFormatter/i18n/it.ts +156 -0
- package/src/tool/jsonFormatter/i18n/ja.ts +157 -0
- package/src/tool/jsonFormatter/i18n/ko.ts +157 -0
- package/src/tool/jsonFormatter/i18n/nl.ts +157 -0
- package/src/tool/jsonFormatter/i18n/pl.ts +156 -0
- package/src/tool/jsonFormatter/i18n/pt.ts +156 -0
- package/src/tool/jsonFormatter/i18n/ru.ts +157 -0
- package/src/tool/jsonFormatter/i18n/sv.ts +157 -0
- package/src/tool/jsonFormatter/i18n/tr.ts +157 -0
- package/src/tool/jsonFormatter/i18n/zh.ts +157 -0
- package/src/tool/jsonFormatter/index.ts +15 -7
- package/src/tool/keycode/i18n/de.ts +161 -0
- package/src/tool/keycode/i18n/es.ts +2 -1
- package/src/tool/keycode/i18n/fr.ts +2 -1
- package/src/tool/keycode/i18n/id.ts +161 -0
- package/src/tool/keycode/i18n/it.ts +161 -0
- package/src/tool/keycode/i18n/ja.ts +161 -0
- package/src/tool/keycode/i18n/ko.ts +161 -0
- package/src/tool/keycode/i18n/nl.ts +161 -0
- package/src/tool/keycode/i18n/pl.ts +161 -0
- package/src/tool/keycode/i18n/pt.ts +160 -0
- package/src/tool/keycode/i18n/ru.ts +160 -0
- package/src/tool/keycode/i18n/sv.ts +160 -0
- package/src/tool/keycode/i18n/tr.ts +160 -0
- package/src/tool/keycode/i18n/zh.ts +161 -0
- package/src/tool/keycode/index.ts +15 -7
- package/src/tool/llmCostCalculator/i18n/de.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/fr.ts +2 -1
- package/src/tool/llmCostCalculator/i18n/id.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/it.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/ja.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/ko.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/nl.ts +166 -0
- package/src/tool/llmCostCalculator/i18n/pl.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/pt.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/ru.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/sv.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/tr.ts +165 -0
- package/src/tool/llmCostCalculator/i18n/zh.ts +166 -0
- package/src/tool/llmCostCalculator/index.ts +24 -0
- package/src/tool/mobileMockupGenerator/i18n/de.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/id.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/it.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/ja.ts +122 -0
- package/src/tool/mobileMockupGenerator/i18n/ko.ts +122 -0
- package/src/tool/mobileMockupGenerator/i18n/nl.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/pl.ts +31 -0
- package/src/tool/mobileMockupGenerator/i18n/pt.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/ru.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/sv.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/tr.ts +121 -0
- package/src/tool/mobileMockupGenerator/i18n/zh.ts +122 -0
- package/src/tool/mobileMockupGenerator/index.ts +24 -0
- package/src/tool/musicalTypography/i18n/de.ts +179 -0
- package/src/tool/musicalTypography/i18n/id.ts +179 -0
- package/src/tool/musicalTypography/i18n/it.ts +179 -0
- package/src/tool/musicalTypography/i18n/ja.ts +180 -0
- package/src/tool/musicalTypography/i18n/ko.ts +180 -0
- package/src/tool/musicalTypography/i18n/nl.ts +179 -0
- package/src/tool/musicalTypography/i18n/pl.ts +179 -0
- package/src/tool/musicalTypography/i18n/pt.ts +101 -0
- package/src/tool/musicalTypography/i18n/ru.ts +47 -0
- package/src/tool/musicalTypography/i18n/sv.ts +29 -0
- package/src/tool/musicalTypography/i18n/tr.ts +29 -0
- package/src/tool/musicalTypography/i18n/zh.ts +30 -0
- package/src/tool/musicalTypography/index.ts +15 -7
- package/src/tool/placeholderGenerator/i18n/de.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/id.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/it.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/ja.ts +177 -0
- package/src/tool/placeholderGenerator/i18n/ko.ts +177 -0
- package/src/tool/placeholderGenerator/i18n/nl.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/pl.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/pt.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/ru.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/sv.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/tr.ts +176 -0
- package/src/tool/placeholderGenerator/i18n/zh.ts +177 -0
- package/src/tool/placeholderGenerator/index.ts +24 -0
- package/src/tool/promptLibrary/i18n/de.ts +131 -0
- package/src/tool/promptLibrary/i18n/id.ts +131 -0
- package/src/tool/promptLibrary/i18n/it.ts +131 -0
- package/src/tool/promptLibrary/i18n/ja.ts +132 -0
- package/src/tool/promptLibrary/i18n/ko.ts +132 -0
- package/src/tool/promptLibrary/i18n/nl.ts +131 -0
- package/src/tool/promptLibrary/i18n/pl.ts +28 -0
- package/src/tool/promptLibrary/i18n/pt.ts +101 -0
- package/src/tool/promptLibrary/i18n/ru.ts +101 -0
- package/src/tool/promptLibrary/i18n/sv.ts +93 -0
- package/src/tool/promptLibrary/i18n/tr.ts +93 -0
- package/src/tool/promptLibrary/i18n/zh.ts +94 -0
- package/src/tool/promptLibrary/index.ts +24 -0
- package/src/tool/readabilityCalculator/i18n/de.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/id.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/it.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/ja.ts +134 -0
- package/src/tool/readabilityCalculator/i18n/ko.ts +134 -0
- package/src/tool/readabilityCalculator/i18n/nl.ts +133 -0
- package/src/tool/readabilityCalculator/i18n/pl.ts +29 -0
- package/src/tool/readabilityCalculator/i18n/pt.ts +91 -0
- package/src/tool/readabilityCalculator/i18n/ru.ts +91 -0
- package/src/tool/readabilityCalculator/i18n/sv.ts +43 -0
- package/src/tool/readabilityCalculator/i18n/tr.ts +43 -0
- package/src/tool/readabilityCalculator/i18n/zh.ts +44 -0
- package/src/tool/readabilityCalculator/index.ts +24 -0
- package/src/tool/svgSanitizer/i18n/de.ts +125 -0
- package/src/tool/svgSanitizer/i18n/id.ts +125 -0
- package/src/tool/svgSanitizer/i18n/it.ts +125 -0
- package/src/tool/svgSanitizer/i18n/ja.ts +126 -0
- package/src/tool/svgSanitizer/i18n/ko.ts +126 -0
- package/src/tool/svgSanitizer/i18n/nl.ts +125 -0
- package/src/tool/svgSanitizer/i18n/pl.ts +125 -0
- package/src/tool/svgSanitizer/i18n/pt.ts +30 -0
- package/src/tool/svgSanitizer/i18n/ru.ts +126 -0
- package/src/tool/svgSanitizer/i18n/sv.ts +126 -0
- package/src/tool/svgSanitizer/i18n/tr.ts +126 -0
- package/src/tool/svgSanitizer/i18n/zh.ts +126 -0
- package/src/tool/svgSanitizer/index.ts +24 -0
- package/src/tool/svgToCss/i18n/de.ts +174 -0
- package/src/tool/svgToCss/i18n/id.ts +174 -0
- package/src/tool/svgToCss/i18n/it.ts +174 -0
- package/src/tool/svgToCss/i18n/ja.ts +175 -0
- package/src/tool/svgToCss/i18n/ko.ts +175 -0
- package/src/tool/svgToCss/i18n/nl.ts +174 -0
- package/src/tool/svgToCss/i18n/pl.ts +174 -0
- package/src/tool/svgToCss/i18n/pt.ts +174 -0
- package/src/tool/svgToCss/i18n/ru.ts +174 -0
- package/src/tool/svgToCss/i18n/sv.ts +174 -0
- package/src/tool/svgToCss/i18n/tr.ts +174 -0
- package/src/tool/svgToCss/i18n/zh.ts +175 -0
- package/src/tool/svgToCss/index.ts +15 -7
- package/src/tool/urlCleaner/i18n/de.ts +116 -0
- package/src/tool/urlCleaner/i18n/id.ts +116 -0
- package/src/tool/urlCleaner/i18n/it.ts +116 -0
- package/src/tool/urlCleaner/i18n/ja.ts +117 -0
- package/src/tool/urlCleaner/i18n/ko.ts +117 -0
- package/src/tool/urlCleaner/i18n/nl.ts +116 -0
- package/src/tool/urlCleaner/i18n/pl.ts +29 -0
- package/src/tool/urlCleaner/i18n/pt.ts +43 -0
- package/src/tool/urlCleaner/i18n/ru.ts +43 -0
- package/src/tool/urlCleaner/i18n/sv.ts +43 -0
- package/src/tool/urlCleaner/i18n/tr.ts +43 -0
- package/src/tool/urlCleaner/i18n/zh.ts +44 -0
- package/src/tool/urlCleaner/index.ts +24 -0
- package/src/tool/urlEncoderDecoder/i18n/de.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/id.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/it.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/ja.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/ko.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/nl.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/pl.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/pt.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/ru.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/sv.ts +163 -0
- package/src/tool/urlEncoderDecoder/i18n/tr.ts +162 -0
- package/src/tool/urlEncoderDecoder/i18n/zh.ts +163 -0
- package/src/tool/urlEncoderDecoder/index.ts +15 -7
- package/src/tool/utmGenerator/i18n/de.ts +118 -0
- package/src/tool/utmGenerator/i18n/id.ts +118 -0
- package/src/tool/utmGenerator/i18n/it.ts +118 -0
- package/src/tool/utmGenerator/i18n/ja.ts +118 -0
- package/src/tool/utmGenerator/i18n/ko.ts +118 -0
- package/src/tool/utmGenerator/i18n/nl.ts +118 -0
- package/src/tool/utmGenerator/i18n/pl.ts +117 -0
- package/src/tool/utmGenerator/i18n/pt.ts +118 -0
- package/src/tool/utmGenerator/i18n/ru.ts +118 -0
- package/src/tool/utmGenerator/i18n/sv.ts +118 -0
- package/src/tool/utmGenerator/i18n/tr.ts +117 -0
- package/src/tool/utmGenerator/i18n/zh.ts +118 -0
- package/src/tool/utmGenerator/index.ts +15 -7
- package/src/types.ts +1 -2
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { GeneradorSecurityTxtUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'security-txt-generator-rfc-9116-tr';
|
|
6
|
+
const title = 'Security.txt Oluşturucu RFC 9116';
|
|
7
|
+
const description = 'Güvenlik açığı raporlamayı kolaylaştırmak ve uluslararası web güvenliği standartlarına uyum sağlamak için profesyonel security.txt dosyası oluşturun.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'security.txt dosyası nedir?',
|
|
12
|
+
answer: 'Bu bir standart (RFC 9116) olup, web sitelerinin güvenlik araştırmacılarının güvenlik açıklarını sorumlu bir şekilde bildirmek için onlarla nasıl iletişim kurması gerektiğini tanımlamasına izin verir.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'security.txt dosyası nereye yerleştirilmeli?',
|
|
16
|
+
answer: 'Önerilen standart konum, etki alanınızın /.well-known/ klasörüdür ve bu da https://example.com/.well-known/security.txt URL\'sini oluşturur.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Sona erme tarihi neden zorunludur?',
|
|
20
|
+
answer: 'İletişim bilgilerinin eski kalmaması için. Dosyada geçerli bir son kullanma tarihi yoksa, araştırmacılar iletişim kanallarının aktif kalıp kalmadığına güvenmiyor olabilirler.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'security.txt\'te hangi alanlar gereklidir?',
|
|
24
|
+
answer: 'RFC 9116\'ya göre gerekli alanlar "Contact" (e-posta adresi veya URL ile) ve "Expires" (ISO 8601 formatında gelecek bir tarih) dir.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: 'Alanları doldurun', text: 'E-posta adresinizi veya iletişim URL\'sini tamamlayın ve sona erme tarihini seçin.' },
|
|
30
|
+
{ name: 'İsteğe bağlı alanlar ekleyin', text: 'PGP anahtarınız, güvenlik politikası veya iş ilanı panosu gibi ek bilgiler ekleyin.' },
|
|
31
|
+
{ name: 'Dosyayı indirin veya kopyalayın', text: '"Download .txt" seçeneğine tıklayın veya içeriği kopyalayarak security.txt olarak kaydfedin.' },
|
|
32
|
+
{ name: 'Sunucuya yükleyin', text: 'Dosyayı etki alanınızın /.well-known/ klasörüne yerleştirin.' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'tr',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: GeneradorSecurityTxtUI = {
|
|
65
|
+
titleBasicFields: 'Gerekli Alanlar',
|
|
66
|
+
labelContact: 'İletişim (E-posta veya URL)',
|
|
67
|
+
placeholderContact: 'mailto:security@example.com veya https://example.com/contact',
|
|
68
|
+
contactTip: 'Güvenlik açığı raporlarının gönderileceği adres.',
|
|
69
|
+
labelExpires: 'Sona Erme Tarihi',
|
|
70
|
+
expiresTip: 'Gelecekte bir yıldan fazla olmamas gerekir.',
|
|
71
|
+
titleOptionalFields: 'İsteğe Bağlı Alanlar',
|
|
72
|
+
labelEncryption: 'Ortak Anahtar',
|
|
73
|
+
placeholderEncryption: 'https://example.com/pgp-key.txt',
|
|
74
|
+
encryptionTip: 'Şifreli raporlar için PGP anahtarınıza bağlantı.',
|
|
75
|
+
labelPolicy: 'Güvenlik Politikası',
|
|
76
|
+
placeholderPolicy: 'https://example.com/security/policy/',
|
|
77
|
+
policyTip: 'Güvenlik açıklarını nasıl işlediğinizi açıklayan sayfa.',
|
|
78
|
+
labelAcknowledgments: 'Teşekkürler',
|
|
79
|
+
placeholderAcknowledgments: 'https://example.com/security/hall-of-fame/',
|
|
80
|
+
acknowledgmentsTip: 'Güvenlik araştırmacılarına teşekkür eden sayfa.',
|
|
81
|
+
labelHiring: 'İş İlanları',
|
|
82
|
+
placeholderHiring: 'https://example.com/jobs',
|
|
83
|
+
hiringTip: 'Güvenlik iş açılışlarına bağlantı.',
|
|
84
|
+
resultTitle: 'Önizleme(security.txt)',
|
|
85
|
+
btnCopy: 'Kodu Kopyala',
|
|
86
|
+
btnDownload: '.txt İndir',
|
|
87
|
+
copiedMessage: 'Kopyalandı',
|
|
88
|
+
generatingMessage: 'security.txt dosyası oluşturuluyor...',
|
|
89
|
+
comment: 'Oluşturuldu',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const content: ToolLocaleContent<GeneradorSecurityTxtUI> = {
|
|
93
|
+
slug,
|
|
94
|
+
title,
|
|
95
|
+
description,
|
|
96
|
+
ui,
|
|
97
|
+
faqTitle: 'Sık Sorulan Sorular',
|
|
98
|
+
faq: faqData,
|
|
99
|
+
bibliographyTitle: 'Security.txt Hakkında Teknik Kaynaklar',
|
|
100
|
+
bibliography: [
|
|
101
|
+
{ name: 'RFC 9116: A File Format to Aid in Security Vulnerability Disclosure', url: 'https://datatracker.ietf.org/doc/html/rfc9116' },
|
|
102
|
+
{ name: 'Security.txt Official Website', url: 'https://securitytxt.org/' },
|
|
103
|
+
{ name: 'OWASP: Vulnerability Disclosure Cheat Sheet', url: 'https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html' },
|
|
104
|
+
],
|
|
105
|
+
howTo: howToData,
|
|
106
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
107
|
+
seo: [
|
|
108
|
+
{ type: 'title', text: 'Security.txt dosyası nedir ve neden bir tane oluşturmalısınız?', level: 2 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: 'Günümüzün siber güvenlik ortamında saydamlık ve iletişim esastır. Sistem yöneticisi, web geliştirici veya dijital işletme sahibiyseniz, muhtemelen <code>robots.txt</code> veya <code>ads.txt</code> gibi makinelerin web sitenizi anlamasına yardımcı olan metin dosyaları hakkında zaten bilgilisiniz. Ancak platformunuzun bütünlüğü için daha az bilinen ancak kritik bir standart vardır: <strong>Security.txt</strong>, <strong>RFC 9116</strong> tarafından tanımlanmıştır.',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'paragraph',
|
|
115
|
+
html: '<strong>Bir security.txt dosyası oluşturmanın</strong> amacı, güvenlik araştırmacılarına bir güvenlik açığı keşfettikleri zaman web sitenizin yöneticilerine başvurmak için standart bir yol sağlamaktır. Bu dosya olmadan, sisteminizde bir kusur bulan etik bir hacker, kime bildireceğini bilmiyor olabilir; bu genellikle bilgilerin kaybolması, bildirim olmadan yayınlanması veya kötü niyetli aktörlerce sömürülmesine neden olur.',
|
|
116
|
+
},
|
|
117
|
+
{ type: 'title', text: 'RFC 9116\'ya uygun Security.txt dosyasını oluşturma ve yükleme', level: 2 },
|
|
118
|
+
{
|
|
119
|
+
type: 'paragraph',
|
|
120
|
+
html: '<strong>Güvenlik araştırmacısı iletişim standardı</strong>, bu dosyanın sunucunuzda belirli bir konumda yer alması gerektiğini belirler: <code>/.well-known/</code> klasörü. Bu nedenle son yol genellikle <code>https://yourdomain.com/.well-known/security.txt</code> şeklindedir. Bunu köke yerleştirmeye izin verilse de (<code>/security.txt</code>), ilk seçenek otomatik tarama araçlarında tercih edilir.',
|
|
121
|
+
},
|
|
122
|
+
{ type: 'title', text: 'Kaçırmanız gereken zorunlu alanlar', level: 3 },
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: '<strong>security.txt kodunuzu elde ettiğinizde</strong> en az iki kritik öğe içerdiğinden emin olmalısınız:',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'list',
|
|
129
|
+
items: [
|
|
130
|
+
'<strong>Contact:</strong> Raporların gönderileceği e-posta adresi veya form URL\'si. <code>mailto:</code> veya <code>https://</code> ile başlamalıdır.',
|
|
131
|
+
'<strong>Expires:</strong> Dosyadaki bilgilerin artık geçerli olmadığı zamanı gösteren ISO 8601 formatında tarih. Tarihi gelecekte bir yıldan daha ileri ayarlamamaması önerilir.',
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{ type: 'code', text: 'Contact: mailto:security@yourcompany.com\nExpires: 2025-12-31T23:59:59.000Z' },
|
|
135
|
+
{ type: 'title', text: 'Gelişmiş güvenlik için isteğe bağlı alanlar', level: 3 },
|
|
136
|
+
{
|
|
137
|
+
type: 'paragraph',
|
|
138
|
+
html: 'Daha sağlam <strong>web sitesi koruması</strong> arayan siteler için standart ek alanlar sunar:',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'list',
|
|
142
|
+
items: [
|
|
143
|
+
'<strong>Encryption:</strong> Araştırmacıların size şifreli ve güvenli bilgi gönderebilmeleri için herkese açık PGP anahtarınıza bağlantı.',
|
|
144
|
+
'<strong>Policy:</strong> Sorumlu ifşa sürecini açıkladığınız güvenlik politikası sayfanıza bağlantı.',
|
|
145
|
+
'<strong>Acknowledgments:</strong> Araştırmacılar için "Şeref Listesi" veya takdir duvarına bağlantı.',
|
|
146
|
+
'<strong>Hiring:</strong> Siber güvenlik iş açılışlarınıza bağlantı.',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
{ type: 'title', text: 'Ücretsiz Security.txt oluşturucumuz kullanmanın faydaları', level: 2 },
|
|
150
|
+
{
|
|
151
|
+
type: 'paragraph',
|
|
152
|
+
html: 'Pek çok insan <strong>bir web sitesinin güvenlik iletişimini hızlı bir şekilde nasıl alacağını</strong> merak ediyor. Aracımızı kullanarak karmaşık teknik belgeleri okumaya gerek kalmadan RFC 9116 formatına kesin bir şekilde uyum sağlarsınız.',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
type: 'paragraph',
|
|
156
|
+
html: 'Bir oluşturucu kullanmak yaygın söz dizimine uyarak hataları önler. Örneğin, <code>mailto:</code> ön ekini unutmak veya son kullanma tarihinde saat dilimini yanlış biçimlendirmek, araştırmacıların otomatik araçlarının dosyanızı göz ardı etmesine neden olabilir.',
|
|
157
|
+
},
|
|
158
|
+
{ type: 'title', text: 'SEO ve web itibarı üzerindeki etki', level: 3 },
|
|
159
|
+
{
|
|
160
|
+
type: 'paragraph',
|
|
161
|
+
html: '<code>security.txt</code> dosyası Google\'de sayfa hızı veya HTTPS gibi doğrudan bir sıralama faktörü olmasa da dolaylı bir etkisi vardır. Güvenlik açıklarını iyi yöneten bir web sitesi, SEO\'yu saatler içinde mahveden gürültülü hacklerden (sahte, spam enjeksiyonu) kaçınır. Ek olarak, birçok kurumsal güvenlik derecelendirme platformu (SecurityScorecard veya BitSight gibi) bu standardı uygulayan etki alanlarına ekstra puan verir.',
|
|
162
|
+
},
|
|
163
|
+
{ type: 'title', text: 'Sonuç: Daha güvenli bir web için basit bir adım', level: 2 },
|
|
164
|
+
{
|
|
165
|
+
type: 'paragraph',
|
|
166
|
+
html: 'Özet olarak, <strong>security.txt indirmek</strong> ve sunucunuza yüklemek, bugün yapabileceğiniz en hızlı ve en etkili güvenlik bakım görevlerinden biridir. "İyi çocuklara" kolaylaştırırsınız, meraklıları caydırırsınız ve dünyaya kullanıcı gizliliği ve verilerine ciddiye aldığınızı gösterirsiniz.',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
type: 'paragraph',
|
|
170
|
+
html: 'Bir güvenlik ihlali yaşayana kadar bunu sağlamadığınız için pişman olmayı beklemeyin. Şu anda <strong>ücretsiz çevrimiçi security.txt oluşturucumuzu</strong> kullanın ve dijital ekosisteminizdeki kontrolü elinizde tutun.',
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
};
|
|
174
|
+
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { GeneradorSecurityTxtUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'security-txt-generator-rfc-9116';
|
|
6
|
+
const title = 'Security.txt生成器 RFC 9116';
|
|
7
|
+
const description = '创建专业的security.txt文件,方便漏洞报告并遵守国际网络安全标准。';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: '什么是security.txt文件?',
|
|
12
|
+
answer: '这是一个标准(RFC 9116),允许网站定义安全研究人员应该如何联系他们来负责任地报告漏洞。',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'security.txt文件应该放在哪里?',
|
|
16
|
+
answer: '建议的标准位置是您域的/.well-known/文件夹中,得到的URL为https://example.com/.well-known/security.txt。',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: '为什么过期日期是强制性的?',
|
|
20
|
+
answer: '为了确保联系信息不会过期。如果文件没有有效的过期日期,研究人员可能不相信通信渠道保持活跃。',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'security.txt中需要哪些字段?',
|
|
24
|
+
answer: '根据RFC 9116,必需字段是"Contact"(带电子邮件地址或URL)和"Expires"(带ISO 8601格式的未来日期)。',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: '填写字段', text: '完成您的电子邮件地址或联系URL并选择过期日期。' },
|
|
30
|
+
{ name: '添加可选字段', text: '包括其他信息,如您的PGP密钥、安全政策或招聘信息栏。' },
|
|
31
|
+
{ name: '下载或复制文件', text: '点击"下载.txt"或复制内容并另存为security.txt。' },
|
|
32
|
+
{ name: '上传到服务器', text: '将文件放在您域的/.well-known/文件夹中。' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'zh',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: GeneradorSecurityTxtUI = {
|
|
65
|
+
titleBasicFields: '必填字段',
|
|
66
|
+
labelContact: '联系人(电子邮件或URL)',
|
|
67
|
+
placeholderContact: 'mailto:security@example.com或https://example.com/contact',
|
|
68
|
+
contactTip: '应该发送漏洞报告的地址。',
|
|
69
|
+
labelExpires: '过期日期',
|
|
70
|
+
expiresTip: '不应超过未来一年。',
|
|
71
|
+
titleOptionalFields: '可选字段',
|
|
72
|
+
labelEncryption: '公钥',
|
|
73
|
+
placeholderEncryption: 'https://example.com/pgp-key.txt',
|
|
74
|
+
encryptionTip: '指向您的PGP密钥以获取加密报告的链接。',
|
|
75
|
+
labelPolicy: '安全政策',
|
|
76
|
+
placeholderPolicy: 'https://example.com/security/policy/',
|
|
77
|
+
policyTip: '详细说明您如何处理漏洞的页面。',
|
|
78
|
+
labelAcknowledgments: '鸣谢',
|
|
79
|
+
placeholderAcknowledgments: 'https://example.com/security/hall-of-fame/',
|
|
80
|
+
acknowledgmentsTip: '感谢安全研究人员的页面。',
|
|
81
|
+
labelHiring: '招聘公告栏',
|
|
82
|
+
placeholderHiring: 'https://example.com/jobs',
|
|
83
|
+
hiringTip: '网络安全职位空缺的链接。',
|
|
84
|
+
resultTitle: '预览(security.txt)',
|
|
85
|
+
btnCopy: '复制代码',
|
|
86
|
+
btnDownload: '下载.txt',
|
|
87
|
+
copiedMessage: '已复制',
|
|
88
|
+
generatingMessage: '生成security.txt文件中...',
|
|
89
|
+
comment: '已生成',
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export const content: ToolLocaleContent<GeneradorSecurityTxtUI> = {
|
|
93
|
+
slug,
|
|
94
|
+
title,
|
|
95
|
+
description,
|
|
96
|
+
ui,
|
|
97
|
+
faqTitle: '常见问题',
|
|
98
|
+
faq: faqData,
|
|
99
|
+
bibliographyTitle: '有关Security.txt的技术资源',
|
|
100
|
+
bibliography: [
|
|
101
|
+
{ name: 'RFC 9116: A File Format to Aid in Security Vulnerability Disclosure', url: 'https://datatracker.ietf.org/doc/html/rfc9116' },
|
|
102
|
+
{ name: 'Security.txt Official Website', url: 'https://securitytxt.org/' },
|
|
103
|
+
{ name: 'OWASP: Vulnerability Disclosure Cheat Sheet', url: 'https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html' },
|
|
104
|
+
],
|
|
105
|
+
howTo: howToData,
|
|
106
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
107
|
+
seo: [
|
|
108
|
+
{ type: 'title', text: '什么是Security.txt文件,为什么您需要生成一个?', level: 2 },
|
|
109
|
+
{
|
|
110
|
+
type: 'paragraph',
|
|
111
|
+
html: '在当今网络安全环境中,透明度和沟通至关重要。如果您是系统管理员、Web开发人员或数字业务所有者,您可能已经熟悉帮助机器理解您网站的文本文件,例如<code>robots.txt</code>或<code>ads.txt</code>。但是,存在一个鲜为人知但对平台完整性至关重要的标准:<strong>Security.txt</strong>,由<strong>RFC 9116</strong>定义。',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
type: 'paragraph',
|
|
115
|
+
html: '<strong>生成security.txt文件的</strong>目的是为安全研究人员提供一种标准化的方式来联系您的网站管理员,当他们发现漏洞时。没有此文件,发现您系统中缺陷的道德黑客可能不知道应该向谁报告,这通常导致信息丢失、未经通知而发布或被恶意行为者利用。',
|
|
116
|
+
},
|
|
117
|
+
{ type: 'title', text: '如何按照RFC 9116创建和安装Security.txt文件', level: 2 },
|
|
118
|
+
{
|
|
119
|
+
type: 'paragraph',
|
|
120
|
+
html: '<strong>安全研究人员联系标准</strong>规定此文件必须位于服务器上的特定位置:<code>/.well-known/</code>文件夹。因此,最终路径通常是<code>https://yourdomain.com/.well-known/security.txt</code>。尽管允许将其放在根目录中(<code>/security.txt</code>),但第一个选项是自动扫描工具的首选。',
|
|
121
|
+
},
|
|
122
|
+
{ type: 'title', text: '您不能错过的必填字段', level: 3 },
|
|
123
|
+
{
|
|
124
|
+
type: 'paragraph',
|
|
125
|
+
html: '当<strong>获取security.txt代码时</strong>,您必须确保其中包含至少两个关键元素:',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
type: 'list',
|
|
129
|
+
items: [
|
|
130
|
+
'<strong>Contact:</strong> 应发送报告的电子邮件地址或表单URL。必须以<code>mailto:</code>或<code>https://</code>开头。',
|
|
131
|
+
'<strong>Expires:</strong> ISO 8601格式的日期,指示文件中的信息何时不再有效。建议不要将日期设置为超过未来一年。',
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
{ type: 'code', text: 'Contact: mailto:security@yourcompany.com\nExpires: 2025-12-31T23:59:59.000Z' },
|
|
135
|
+
{ type: 'title', text: '高级安全的可选字段', level: 3 },
|
|
136
|
+
{
|
|
137
|
+
type: 'paragraph',
|
|
138
|
+
html: '对于寻求更强大<strong>网站保护</strong>的网站,该标准提供了其他字段:',
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
type: 'list',
|
|
142
|
+
items: [
|
|
143
|
+
'<strong>Encryption:</strong> 指向您的PGP公钥的链接,以便研究人员可以向您发送加密和安全信息。',
|
|
144
|
+
'<strong>Policy:</strong> 指向您的安全政策页面的链接,您可以在其中解释负责任的披露流程。',
|
|
145
|
+
'<strong>Acknowledgments:</strong> 指向您的"名人堂"或感谢墙的链接,用于研究人员。',
|
|
146
|
+
'<strong>Hiring:</strong> 指向您网络安全工作机会的链接。',
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
{ type: 'title', text: '使用我们的免费Security.txt生成器的优势', level: 2 },
|
|
150
|
+
{
|
|
151
|
+
type: 'paragraph',
|
|
152
|
+
html: '许多人想知道<strong>如何快速获得网站的安全联系方式</strong>。通过使用我们的工具,您可以严格遵守RFC 9116格式,而无需阅读复杂的技术文档。',
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
type: 'paragraph',
|
|
156
|
+
html: '使用生成器可以避免常见的语法错误。例如,忘记<code>mailto:</code>前缀或不正确地格式化过期日期中的时区可能导致研究人员的自动化工具忽略您的文件。',
|
|
157
|
+
},
|
|
158
|
+
{ type: 'title', text: '对SEO和网络声誉的影响', level: 3 },
|
|
159
|
+
{
|
|
160
|
+
type: 'paragraph',
|
|
161
|
+
html: '尽管<code>security.txt</code>文件不是Google中的直接排名因素(如页面速度或HTTPS),但它确实有间接影响。管理漏洞的网站可以避免在几小时内破坏SEO的噪声hack(欺骗、垃圾邮件注入)。此外,许多企业安全评分平台(如SecurityScorecard或BitSight)向实施此标准的域名颁发额外积分。',
|
|
162
|
+
},
|
|
163
|
+
{ type: 'title', text: '结论:为更安全的网络迈出的简单一步', level: 2 },
|
|
164
|
+
{
|
|
165
|
+
type: 'paragraph',
|
|
166
|
+
html: '总之,<strong>下载security.txt</strong>并将其上传到服务器是您今天可以执行的最快速、最有效的安全维护任务之一。您为"好人"提供便利,阻止好奇者,并向世界展示您认真对待用户隐私和数据。',
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
type: 'paragraph',
|
|
170
|
+
html: '不要等到安全漏洞再为没有提供此内容而后悔。现在使用我们的<strong>在线security.txt生成器</strong>并保持对数字生态系统的控制。',
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
};
|
|
174
|
+
|
|
@@ -6,10 +6,6 @@ import type { GeneradorSecurityTxtUI } from './ui';
|
|
|
6
6
|
|
|
7
7
|
export type GeneradorSecurityTxtLocaleContent = ToolLocaleContent<GeneradorSecurityTxtUI>;
|
|
8
8
|
|
|
9
|
-
import { content as es } from './i18n/es';
|
|
10
|
-
import { content as en } from './i18n/en';
|
|
11
|
-
import { content as fr } from './i18n/fr';
|
|
12
|
-
|
|
13
9
|
export const generadorSecurityTxt: DeveloperToolEntry<GeneradorSecurityTxtUI> = {
|
|
14
10
|
id: 'generador-security-txt',
|
|
15
11
|
icons: {
|
|
@@ -17,9 +13,21 @@ export const generadorSecurityTxt: DeveloperToolEntry<GeneradorSecurityTxtUI> =
|
|
|
17
13
|
fg: 'mdi:file-document',
|
|
18
14
|
},
|
|
19
15
|
i18n: {
|
|
20
|
-
|
|
21
|
-
en: async () => en,
|
|
22
|
-
|
|
16
|
+
de: async () => (await import('./i18n/de')).content,
|
|
17
|
+
en: async () => (await import('./i18n/en')).content,
|
|
18
|
+
es: async () => (await import('./i18n/es')).content,
|
|
19
|
+
fr: async () => (await import('./i18n/fr')).content,
|
|
20
|
+
id: async () => (await import('./i18n/id')).content,
|
|
21
|
+
it: async () => (await import('./i18n/it')).content,
|
|
22
|
+
ja: async () => (await import('./i18n/ja')).content,
|
|
23
|
+
ko: async () => (await import('./i18n/ko')).content,
|
|
24
|
+
nl: async () => (await import('./i18n/nl')).content,
|
|
25
|
+
pl: async () => (await import('./i18n/pl')).content,
|
|
26
|
+
pt: async () => (await import('./i18n/pt')).content,
|
|
27
|
+
ru: async () => (await import('./i18n/ru')).content,
|
|
28
|
+
sv: async () => (await import('./i18n/sv')).content,
|
|
29
|
+
tr: async () => (await import('./i18n/tr')).content,
|
|
30
|
+
zh: async () => (await import('./i18n/zh')).content,
|
|
23
31
|
},
|
|
24
32
|
};
|
|
25
33
|
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { HashGeneratorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'hash-generator-de';
|
|
6
|
+
const title = 'Online Sicherheits Hash Generator';
|
|
7
|
+
const description = 'Berechnen Sie sofort MD5, SHA-1, SHA-256 und SHA-512-Hashes. Kostenloses, privates und ultraschnelles Sicherheitstool für Entwickler. 100 % Client-Side.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Was ist ein Hash und wofür wird er verwendet?',
|
|
12
|
+
answer: 'Ein Hash ist ein eindeutiger digitaler Fingerabdruck eines Textes oder einer Datei. Er wird verwendet, um sicherzustellen, dass Daten nicht manipuliert wurden, und um Passwörter sicher zu speichern.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Ist es sicher, diesen Online-Generator zu verwenden?',
|
|
16
|
+
answer: 'Ja, es ist absolut sicher. Im Gegensatz zu anderen Websites verarbeiten wir den Hash direkt in Ihrem Browser. Ihre Daten werden niemals an einen Server gesendet.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Welchen Hash-Algorithmus sollte ich wählen?',
|
|
20
|
+
answer: 'Für moderne Sicherheit und Speicherung von Schlüsseln empfehlen wir SHA-256 oder SHA-512. MD5 und SHA-1 sollten nur aus Kompatibilitätsgründen mit Altsystemen verwendet werden.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Was bedeutet das Hinzufügen eines "Salt"?',
|
|
24
|
+
answer: 'Ein Salt ist eine zusätzliche Zeichenfolge, die mit Ihrem Text gemischt wird, um den Hash eindeutig zu machen und das Knacken durch Wörterbuchangriffe erheblich zu erschweren.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: 'Text eingeben', text: 'Geben Sie den Text, den Sie hashen möchten, in das Eingabefeld ein oder fügen Sie ihn ein.' },
|
|
30
|
+
{ name: 'Sicherheit konfigurieren', text: 'Fügen Sie ein optionales Salt hinzu oder erhöhen Sie die Verarbeitungsrunden für mehr Robustheit.' },
|
|
31
|
+
{ name: 'Ergebnisse erhalten', text: 'Die verschiedenen Hashes (MD5, SHA etc.) werden während der Eingabe in Echtzeit berechnet.' },
|
|
32
|
+
{ name: 'Hash kopieren', text: 'Klicken Sie auf das Kopiersymbol neben jedem Algorithmus, um ihn in Ihre Zwischenablage zu speichern.' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'de',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: HashGeneratorUI = {
|
|
65
|
+
labelInput: 'Eingabetext',
|
|
66
|
+
placeholderInput: 'Geben Sie Text hier ein, um seine Hashes zu berechnen...',
|
|
67
|
+
labelSalt: 'Salt (Optional)',
|
|
68
|
+
placeholderSalt: 'Sicherheits-Seed...',
|
|
69
|
+
labelRounds: 'Runden (Stretch)',
|
|
70
|
+
copyMd5: 'MD5 kopieren',
|
|
71
|
+
copySha1: 'SHA-1 kopieren',
|
|
72
|
+
copySha256: 'SHA-256 kopieren',
|
|
73
|
+
copySha512: 'SHA-512 kopieren',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<HashGeneratorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
ui,
|
|
81
|
+
faqTitle: 'Häufig gestellte Fragen',
|
|
82
|
+
faq: faqData,
|
|
83
|
+
bibliographyTitle: 'Technische Ressourcen zu Hashing',
|
|
84
|
+
bibliography: [
|
|
85
|
+
{ name: 'MDN Web Docs: SubtleCrypto.digest() API', url: 'https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest' },
|
|
86
|
+
{ name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
|
|
87
|
+
{ name: 'IETF: The MD5 Message-Digest Algorithm (RFC 1321)', url: 'https://datatracker.ietf.org/doc/html/rfc1321' },
|
|
88
|
+
],
|
|
89
|
+
howTo: howToData,
|
|
90
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
91
|
+
seo: [
|
|
92
|
+
{ type: 'title', text: 'Was ist ein kryptografischer Hash?', level: 2 },
|
|
93
|
+
{
|
|
94
|
+
type: 'paragraph',
|
|
95
|
+
html: 'Ein <strong>kryptografischer Hash</strong> ist eine mathematische Funktion, die eine beliebige Datenmenge in eine Zeichenfolge fester Länge umwandelt. Dieselbe Eingabe erzeugt immer dieselbe Ausgabe, aber jede minimale Änderung an der Eingabe erzeugt einen völlig anderen Hash.',
|
|
96
|
+
},
|
|
97
|
+
{ type: 'title', text: 'Verfügbare Algorithmen', level: 3 },
|
|
98
|
+
{
|
|
99
|
+
type: 'list',
|
|
100
|
+
items: [
|
|
101
|
+
'<strong>MD5 (128 Bit):</strong> Schnell und weit verbreitet. Gilt als unsicher für Passwörter, ist aber für Datenintegritätsprüfungen in unkritischen Umgebungen nützlich.',
|
|
102
|
+
'<strong>SHA-1 (160 Bit):</strong> Seit 2017 für kritische Sicherheitsanwendungen veraltet. In Altsystemen immer noch vorhanden.',
|
|
103
|
+
'<strong>SHA-256 (256 Bit):</strong> Der aktuelle Standard für die meisten Anwendungen. Wird in Bitcoin, TLS und Code-Signierung verwendet.',
|
|
104
|
+
'<strong>SHA-512 (512 Bit):</strong> Längere Variante von SHA-2, ideal, wenn maximale Kollisionssicherheit erforderlich ist.',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
{ type: 'title', text: 'Salt und Key Stretching', level: 3 },
|
|
108
|
+
{
|
|
109
|
+
type: 'paragraph',
|
|
110
|
+
html: 'Das <strong>Salt</strong> ist eine zufällige Zeichenfolge, die dem Text vor dem Hashing hinzugefügt wird, um sicherzustellen, dass zwei identische Eingaben unterschiedliche Hashes erzeugen. <strong>Key Stretching</strong> (Runden) wendet die Hash-Funktion mehrmals an, um gegen Brute-Force-Angriffe resistenter zu machen.',
|
|
111
|
+
},
|
|
112
|
+
{ type: 'title', text: 'Absolute Privatsphäre: 100 % Client-Side', level: 3 },
|
|
113
|
+
{
|
|
114
|
+
type: 'paragraph',
|
|
115
|
+
html: 'Dieses Tool verwendet die <strong>Web Crypto API</strong> des Browsers für SHA und eine reine TypeScript-Implementierung für MD5. Die gesamte Verarbeitung erfolgt lokal: Ihre Daten verlassen niemals Ihr Gerät.',
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { HashGeneratorUI } from '../ui';
|
|
4
|
+
|
|
5
|
+
const slug = 'hash-generator-id';
|
|
6
|
+
const title = 'Generator Hash Keamanan Online';
|
|
7
|
+
const description = 'Hitung hash MD5, SHA-1, SHA-256, dan SHA-512 secara instan. Alat keamanan gratis, pribadi, dan sangat cepat untuk pengembang. 100% Sisi Klien.';
|
|
8
|
+
|
|
9
|
+
const faqData = [
|
|
10
|
+
{
|
|
11
|
+
question: 'Apa itu hash dan apa gunanya?',
|
|
12
|
+
answer: 'Hash adalah sidik jari digital unik dari sebuah teks atau file. Hash digunakan untuk memverifikasi bahwa data belum diubah dan untuk menyimpan kata sandi dengan aman.',
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
question: 'Apakah aman menggunakan generator online ini?',
|
|
16
|
+
answer: 'Ya, ini sepenuhnya aman. Berbeda dengan situs lain, kami memproses hash langsung di browser Anda. Data Anda tidak pernah dikirim ke server mana pun.',
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
question: 'Algoritma hash mana yang harus saya pilih?',
|
|
20
|
+
answer: 'Untuk keamanan modern dan penyimpanan kunci, kami merekomendasikan SHA-256 atau SHA-512. MD5 dan SHA-1 hanya boleh digunakan untuk kompatibilitas dengan sistem lama.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: "Apa arti dari menambahkan 'Salt'?",
|
|
24
|
+
answer: 'Salt adalah string tambahan yang dicampur dengan teks Anda untuk membuat hash menjadi unik dan jauh lebih sulit untuk dipecahkan melalui serangan kamus.',
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const howToData = [
|
|
29
|
+
{ name: 'Masukkan Teks', text: 'Ketik atau tempel teks yang ingin Anda hash ke dalam kotak input.' },
|
|
30
|
+
{ name: 'Konfigurasi Keamanan', text: 'Tambahkan Salt opsional atau tingkatkan putaran pemrosesan untuk ketahanan yang lebih besar.' },
|
|
31
|
+
{ name: 'Dapatkan Hasil', text: 'Berbagai hash (MD5, SHA, dll.) dihitung secara real-time saat Anda mengetik.' },
|
|
32
|
+
{ name: 'Salin Hash', text: 'Klik ikon salin di sebelah setiap algoritma untuk menyimpannya ke papan klip Anda.' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
36
|
+
'@context': 'https://schema.org',
|
|
37
|
+
'@type': 'FAQPage',
|
|
38
|
+
mainEntity: faqData.map((item) => ({
|
|
39
|
+
'@type': 'Question',
|
|
40
|
+
name: item.question,
|
|
41
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
42
|
+
})),
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
46
|
+
'@context': 'https://schema.org',
|
|
47
|
+
'@type': 'HowTo',
|
|
48
|
+
name: title,
|
|
49
|
+
description,
|
|
50
|
+
step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'SoftwareApplication',
|
|
56
|
+
name: title,
|
|
57
|
+
description,
|
|
58
|
+
applicationCategory: 'UtilityApplication',
|
|
59
|
+
operatingSystem: 'All',
|
|
60
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
61
|
+
inLanguage: 'id',
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const ui: HashGeneratorUI = {
|
|
65
|
+
labelInput: 'Teks input',
|
|
66
|
+
placeholderInput: 'Ketik atau tempel teks di sini untuk menghitung hash-nya...',
|
|
67
|
+
labelSalt: 'Salt (Opsional)',
|
|
68
|
+
placeholderSalt: 'Benih keamanan...',
|
|
69
|
+
labelRounds: 'Putaran (Stretch)',
|
|
70
|
+
copyMd5: 'Salin MD5',
|
|
71
|
+
copySha1: 'Salin SHA-1',
|
|
72
|
+
copySha256: 'Salin SHA-256',
|
|
73
|
+
copySha512: 'Salin SHA-512',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export const content: ToolLocaleContent<HashGeneratorUI> = {
|
|
77
|
+
slug,
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
ui,
|
|
81
|
+
faqTitle: 'Pertanyaan yang Sering Diajukan',
|
|
82
|
+
faq: faqData,
|
|
83
|
+
bibliographyTitle: 'Sumber Daya Teknis tentang Hashing',
|
|
84
|
+
bibliography: [
|
|
85
|
+
{ name: 'MDN Web Docs: SubtleCrypto.digest() API', url: 'https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest' },
|
|
86
|
+
{ name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
|
|
87
|
+
{ name: 'IETF: The MD5 Message-Digest Algorithm (RFC 1321)', url: 'https://datatracker.ietf.org/doc/html/rfc1321' },
|
|
88
|
+
],
|
|
89
|
+
howTo: howToData,
|
|
90
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
91
|
+
seo: [
|
|
92
|
+
{ type: 'title', text: 'Apa itu Hash Kriptografi?', level: 2 },
|
|
93
|
+
{
|
|
94
|
+
type: 'paragraph',
|
|
95
|
+
html: 'Sebuah <strong>hash kriptografi</strong> adalah fungsi matematika yang mengubah sejumlah data menjadi string dengan panjang tetap. Input yang sama selalu menghasilkan output yang sama, tetapi sedikit saja perubahan pada input akan menghasilkan hash yang sama sekali berbeda.',
|
|
96
|
+
},
|
|
97
|
+
{ type: 'title', text: 'Algoritma yang tersedia', level: 3 },
|
|
98
|
+
{
|
|
99
|
+
type: 'list',
|
|
100
|
+
items: [
|
|
101
|
+
'<strong>MD5 (128 bit):</strong> Cepat dan didukung luas. Dianggap tidak aman untuk kata sandi tetapi berguna untuk pemeriksaan integritas file di lingkungan non-kritis.',
|
|
102
|
+
'<strong>SHA-1 (160 bit):</strong> Tidak lagi digunakan untuk kegunaan keamanan kritis sejak 2017. Masih ada di sistem lama.',
|
|
103
|
+
'<strong>SHA-256 (256 bit):</strong> Standar saat ini untuk sebagian besar aplikasi. Digunakan dalam Bitcoin, TLS, dan penandatanganan kode.',
|
|
104
|
+
'<strong>SHA-512 (512 bit):</strong> Varian SHA-2 yang lebih panjang, ideal ketika diperlukan resistensi tabrakan maksimum.',
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
{ type: 'title', text: 'Salt dan Key Stretching', level: 3 },
|
|
108
|
+
{
|
|
109
|
+
type: 'paragraph',
|
|
110
|
+
html: '<strong>Salt</strong> adalah string acak yang ditambahkan ke teks sebelum proses hashing, memastikan bahwa dua input yang identik menghasilkan hash yang berbeda. <strong>Key Stretching</strong> (putaran) menerapkan fungsi hash berkali-kali untuk memperkuat ketahanan terhadap serangan brute-force.',
|
|
111
|
+
},
|
|
112
|
+
{ type: 'title', text: 'Privasi total: 100% Sisi Klien', level: 3 },
|
|
113
|
+
{
|
|
114
|
+
type: 'paragraph',
|
|
115
|
+
html: 'Alat ini menggunakan <strong>Web Crypto API</strong> browser untuk SHA dan implementasi TypeScript murni untuk MD5. Semua pemrosesan terjadi secara lokal: data Anda tidak pernah meninggalkan perangkat Anda.',
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
|