@jjlmoya/utils-games-development 1.50.0 → 1.52.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 (61) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +8 -1
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/audioLoopPointFinder/audio-loop-point-finder.css +322 -0
  7. package/src/tool/audioLoopPointFinder/audio-player.ts +84 -0
  8. package/src/tool/audioLoopPointFinder/bibliography.astro +6 -0
  9. package/src/tool/audioLoopPointFinder/bibliography.ts +16 -0
  10. package/src/tool/audioLoopPointFinder/client.ts +262 -0
  11. package/src/tool/audioLoopPointFinder/component.astro +147 -0
  12. package/src/tool/audioLoopPointFinder/dom-utils.ts +55 -0
  13. package/src/tool/audioLoopPointFinder/entry.ts +27 -0
  14. package/src/tool/audioLoopPointFinder/i18n/de.ts +211 -0
  15. package/src/tool/audioLoopPointFinder/i18n/en.ts +211 -0
  16. package/src/tool/audioLoopPointFinder/i18n/es.ts +211 -0
  17. package/src/tool/audioLoopPointFinder/i18n/fr.ts +211 -0
  18. package/src/tool/audioLoopPointFinder/i18n/id.ts +211 -0
  19. package/src/tool/audioLoopPointFinder/i18n/it.ts +211 -0
  20. package/src/tool/audioLoopPointFinder/i18n/ja.ts +211 -0
  21. package/src/tool/audioLoopPointFinder/i18n/ko.ts +211 -0
  22. package/src/tool/audioLoopPointFinder/i18n/nl.ts +211 -0
  23. package/src/tool/audioLoopPointFinder/i18n/pl.ts +211 -0
  24. package/src/tool/audioLoopPointFinder/i18n/pt.ts +211 -0
  25. package/src/tool/audioLoopPointFinder/i18n/ru.ts +211 -0
  26. package/src/tool/audioLoopPointFinder/i18n/sv.ts +211 -0
  27. package/src/tool/audioLoopPointFinder/i18n/tr.ts +211 -0
  28. package/src/tool/audioLoopPointFinder/i18n/zh.ts +211 -0
  29. package/src/tool/audioLoopPointFinder/index.ts +11 -0
  30. package/src/tool/audioLoopPointFinder/logic.test.ts +72 -0
  31. package/src/tool/audioLoopPointFinder/logic.ts +214 -0
  32. package/src/tool/audioLoopPointFinder/metadata-parser.ts +94 -0
  33. package/src/tool/audioLoopPointFinder/seo.astro +15 -0
  34. package/src/tool/audioLoopPointFinder/ui.ts +42 -0
  35. package/src/tool/audioLoopPointFinder/waveform-renderer.ts +53 -0
  36. package/src/tool/saveFileEditor/bibliography.astro +6 -0
  37. package/src/tool/saveFileEditor/bibliography.ts +12 -0
  38. package/src/tool/saveFileEditor/component.astro +351 -0
  39. package/src/tool/saveFileEditor/entry.ts +28 -0
  40. package/src/tool/saveFileEditor/game-save-file-editor.css +250 -0
  41. package/src/tool/saveFileEditor/i18n/de.ts +182 -0
  42. package/src/tool/saveFileEditor/i18n/en.ts +182 -0
  43. package/src/tool/saveFileEditor/i18n/es.ts +182 -0
  44. package/src/tool/saveFileEditor/i18n/fr.ts +182 -0
  45. package/src/tool/saveFileEditor/i18n/id.ts +182 -0
  46. package/src/tool/saveFileEditor/i18n/it.ts +182 -0
  47. package/src/tool/saveFileEditor/i18n/ja.ts +182 -0
  48. package/src/tool/saveFileEditor/i18n/ko.ts +182 -0
  49. package/src/tool/saveFileEditor/i18n/nl.ts +182 -0
  50. package/src/tool/saveFileEditor/i18n/pl.ts +182 -0
  51. package/src/tool/saveFileEditor/i18n/pt.ts +182 -0
  52. package/src/tool/saveFileEditor/i18n/ru.ts +182 -0
  53. package/src/tool/saveFileEditor/i18n/sv.ts +182 -0
  54. package/src/tool/saveFileEditor/i18n/tr.ts +182 -0
  55. package/src/tool/saveFileEditor/i18n/zh.ts +182 -0
  56. package/src/tool/saveFileEditor/index.ts +11 -0
  57. package/src/tool/saveFileEditor/logic.test.ts +69 -0
  58. package/src/tool/saveFileEditor/logic.ts +139 -0
  59. package/src/tool/saveFileEditor/seo.astro +15 -0
  60. package/src/tool/saveFileEditor/ui.ts +24 -0
  61. package/src/tools.ts +5 -0
@@ -0,0 +1,182 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { SaveFileEditorUI } from '../ui';
3
+ import { bibliographyEntries } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<SaveFileEditorUI> = {
6
+ slug: 'game-save-file-editor',
7
+ title: 'ゲームセーブファイル難読化およびエディタ',
8
+ description: 'ブラウザ内で完全ローカルにBase64、XORマスク、またはプレーンテキストを使用してゲームセーブデータを複合、検査、編集、再暗号化します。',
9
+ ui: {
10
+ title: 'ゲームセーブデータ難読化およびエディタ',
11
+ subtitle: 'サーバーへデータを送信せず安全にローカルセーブデータを検証、編集、暗号化',
12
+ dropSaveFile: 'ここにセーブファイルをドラッグアンドドロップ',
13
+ orSelectFile: 'またはクリックしてローカルファイルを選択',
14
+ encryptionMethod: '暗号化形式',
15
+ methodBase64: 'Base64エンコード',
16
+ methodXor: 'XORマスク + Base64',
17
+ methodRaw: 'プレーンJSON / 非暗号化',
18
+ xorKeyLabel: 'XORシークレットキー',
19
+ xorKeyPlaceholder: '例: MySecretGameKey2026',
20
+ jsonRawTitle: 'デコード済みJSONペイロード(ライブエディタ)',
21
+ encodeAndDownload: '暗号化してファイルをダウンロード',
22
+ copyEncoded: '暗号化テキストをコピー',
23
+ copiedNotice: 'クリップボードにコピーしました!',
24
+ decodedKeysCount: '総パラメータ数',
25
+ dataSize: 'ペイロードサイズ',
26
+ detectedFormat: '検出された形式',
27
+ exportPreviewLabel: '暗号化出力プレビュー',
28
+ decodePanelTitle: 'デコードおよびライブJSONエディタ',
29
+ exportPanelTitle: '再暗号化出力ペイロード',
30
+ decodeError: 'セーブファイルのデコードに失敗しました',
31
+ bytesUnit: 'バイト',
32
+ },
33
+ seo: [
34
+ {
35
+ type: 'title',
36
+ level: 2,
37
+ text: 'ゲームセーブファイルのセキュリティと難読化プロトコル',
38
+ },
39
+ {
40
+ type: 'paragraph',
41
+ html: 'ゲーム開発において、プレイヤーの進行状況やインベントリ数、解放されたステージ、キャラクター属性などのゲーム状態は、永続的なストレージ形式にシリアライズされて保存されます。一般的なテキストエディタによる不正な改ざんを防ぐため、開発スタジオはBase64エンコードや特定のシークレットキーを使用したビット演算XORマスクを用いてセーブデータを難読化します。内部QAテストや運用中のデバッグ作業において、開発チームはバイナリを再コンパイルすることなく、生のJSON構造を検査し、境界値をテストし、変更されたデータを迅速に再暗号化するツールを必要とします。',
42
+ },
43
+ {
44
+ type: 'stats',
45
+ columns: 4,
46
+ items: [
47
+ { label: 'クライアント処理プライバシー', value: '100% ローカル' },
48
+ { label: '対応デコーダー', value: 'Base64 / XOR / JSON' },
49
+ { label: 'デコードレイテンシ', value: '0 ms' },
50
+ { label: 'データ漏洩リスク', value: 'ゼロ' },
51
+ ],
52
+ },
53
+ {
54
+ type: 'title',
55
+ level: 2,
56
+ text: '難読化スキームの比較',
57
+ },
58
+ {
59
+ type: 'comparative',
60
+ columns: 3,
61
+ items: [
62
+ {
63
+ title: 'Base64エンコード',
64
+ description: 'メモ帳での直接編集を防ぐ軽量な文字列変換ですが、暗号的なセキュリティは提供しません。',
65
+ },
66
+ {
67
+ title: 'XORマスク + Base64',
68
+ description: 'インディーゲーム開発の標準的な手法。シークレットキーとバイト列を演算しメモリ改ざんを防ぎます。',
69
+ },
70
+ {
71
+ title: 'プレーンJSONペイロード',
72
+ description: '非暗号化の読解可能な状態。初期プロトタイピングやデバッグビルドに最適です。',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ type: 'title',
78
+ level: 2,
79
+ text: 'セーブ状態検証のためのQAテスト手法',
80
+ },
81
+ {
82
+ type: 'tip',
83
+ title: 'QAにおけるセーブセキュリティのベストプラクティス',
84
+ html: '内部ビルドと本番ビルドで常に異なるデバッグキーを使用してください。限界値のバグを検証する際はローカルツリーエディタを活用し、再コンパイルなしでテストを行ってください。',
85
+ },
86
+ {
87
+ type: 'title',
88
+ level: 2,
89
+ text: 'ゲーム状態パラメータガイドライン表',
90
+ },
91
+ {
92
+ type: 'table',
93
+ headers: ['データ型', '推奨形式', '一般的な用途', '難読化層'],
94
+ rows: [
95
+ ['数値整数', '32ビット整数', 'コイン、レベル、経験値、弾薬', 'XORマスク'],
96
+ ['ブーリアンフラグ', '標準ブーリアン', 'チュートリアル完了、ボス撃破', 'Base64 / XOR'],
97
+ ['ネストされたオブジェクト', 'JSON階層', 'インベントリ、スキルツリー', 'Base64エンコード'],
98
+ ['タイムスタンプ文字列', 'ISO 8601 UTC', 'デイリーログイン、保存日時', 'XORマスク'],
99
+ ],
100
+ },
101
+ {
102
+ type: 'title',
103
+ level: 2,
104
+ text: 'リバースエンジニアリングと不正改ざん対策の考慮事項',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'クライアント側での難読化は一般的なユーザーによる改ざんを抑止しますが、XOR演算やBase64は完全な暗号化アルゴリズムではありません。RenderDocやx64dbgなどのデバッグツールを使用すると、コンパイルされたアセンブリから生成ルーチンを解析される可能性があります。競争的なマルチプレイヤーゲームでは、サーバー側での検証やHMAC署名によるハッシュ検証を併用することが推奨されます。',
109
+ },
110
+ ],
111
+ faqTitle: 'よくある質問',
112
+ faq: [
113
+ {
114
+ question: 'セーブファイルが外部サーバーにアップロードされることはありますか?',
115
+ answer: 'いいえ。すべてのデコード、JSON編集、再暗号化処理は100%お使いのWebブラウザのJavaScriptエンジン内でローカルに実行されます。',
116
+ },
117
+ {
118
+ question: 'UnityやGodotなどのゲームエンジンでXOR難読化はどのように機能しますか?',
119
+ answer: 'シリアライズされたJSON文字列のUTF-8バイト列に対して、指定されたシークレットキーの各文字とビット演算XORを実行し、その結果をBase64化します。',
120
+ },
121
+ ],
122
+ howTo: [
123
+ {
124
+ name: 'セーブファイルの読み込みまたは貼り付け',
125
+ text: '暗号化されたセーブファイルをアップロードするか、サンプルプリセットを選択します。',
126
+ },
127
+ {
128
+ name: 'デコード方法とキーの選択',
129
+ text: 'Base64またはXORマスクを選択し、ゲームのシークレットキーを入力してデコードします。',
130
+ },
131
+ {
132
+ name: 'JSON状態の編集',
133
+ text: 'ライブエディタを使用してレベル、所持金、アイテム、ゲームフラグを自由に編集します。',
134
+ },
135
+ {
136
+ name: '暗号化とエクスポート',
137
+ text: '出力形式を選択し、テスト用に更新されたセーブファイルをダウンロードします。',
138
+ },
139
+ ],
140
+ schemas: [
141
+ {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'SoftwareApplication',
144
+ name: 'ゲームセーブファイルエディタ',
145
+ applicationCategory: 'DeveloperApplication',
146
+ operatingSystem: 'Any',
147
+ offers: {
148
+ '@type': 'Offer',
149
+ price: '0',
150
+ priceCurrency: 'JPY',
151
+ },
152
+ },
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: [
157
+ {
158
+ '@type': 'Question',
159
+ name: 'セーブファイルが外部サーバーにアップロードされることはありますか?',
160
+ acceptedAnswer: {
161
+ '@type': 'Answer',
162
+ text: 'いいえ。すべての処理は100%ブラウザ内で完了します。',
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'HowTo',
170
+ name: '暗号化されたゲームセーブファイルを編集する方法',
171
+ step: [
172
+ {
173
+ '@type': 'HowToStep',
174
+ name: 'セーブファイルの読み込み',
175
+ text: '暗号化されたセーブファイルをアップロードします。',
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ bibliographyTitle: '参考文献および関連資料',
181
+ bibliography: bibliographyEntries,
182
+ };
@@ -0,0 +1,182 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { SaveFileEditorUI } from '../ui';
3
+ import { bibliographyEntries } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<SaveFileEditorUI> = {
6
+ slug: 'game-save-file-editor',
7
+ title: '게임 저장 파일 난독화 및 에디터',
8
+ description: '브라우저 내에서 100% 로컬로 Base64, XOR 마스킹 또는 일반 텍스트를 사용하여 게임 저장 데이터를 복호화, 검사, 수정 및 재암호화합니다.',
9
+ ui: {
10
+ title: '게임 저장 데이터 난독화 및 에디터',
11
+ subtitle: '서버 전송 없이 안전하게 로컬 저장 데이터 상태를 검사, 수정 및 암호화',
12
+ dropSaveFile: '여기에 저장 파일을 드래그 앤 드롭하세요',
13
+ orSelectFile: '또는 클릭하여 로컬 파일 선택',
14
+ encryptionMethod: '암호화 형식',
15
+ methodBase64: 'Base64 인코딩',
16
+ methodXor: 'XOR 마스크 + Base64',
17
+ methodRaw: '일반 JSON / 비암호화',
18
+ xorKeyLabel: 'XOR 비밀키',
19
+ xorKeyPlaceholder: '예: MySecretGameKey2026',
20
+ jsonRawTitle: '디코딩된 JSON 페이로드 (라이브 에디터)',
21
+ encodeAndDownload: '암호화 및 파일 다운로드',
22
+ copyEncoded: '암호화된 텍스트 복사',
23
+ copiedNotice: '클립보드에 복사되었습니다!',
24
+ decodedKeysCount: '총 매개변수',
25
+ dataSize: '페이로드 크기',
26
+ detectedFormat: '감지된 형식',
27
+ exportPreviewLabel: '암호화 출력 미리보기',
28
+ decodePanelTitle: '디코드 및 라이브 JSON 에디터',
29
+ exportPanelTitle: '재암호화된 출력 페이로드',
30
+ decodeError: '저장 파일 디코딩에 실패했습니다',
31
+ bytesUnit: '바이트',
32
+ },
33
+ seo: [
34
+ {
35
+ type: 'title',
36
+ level: 2,
37
+ text: '게임 저장 파일 보안 및 난독화 프로토콜',
38
+ },
39
+ {
40
+ type: 'paragraph',
41
+ html: '게임 개발 과정에서 플레이어의 진행 상황, 인벤토리, 해금된 스테이지, 캐릭터 능력치 등은 지속성 저장소에 직렬화되어 저장됩니다. 일반 텍스트 에디터를 통한 무단 수정을 방지하기 위해, 개발 스튜디오는 Base64 인코딩이나 특정 비밀키를 사용한 비트 XOR 마스킹 기법으로 저장 데이터를 난독화합니다. 품질 보증 QA 테스트 및 라이브 운영 디버깅 시, 개발 팀은 게임 바이너리를 재컴파일하지 않고도 원시 JSON 구조를 즉시 검사하고 엣지 케이스 상태를 설정하며 수정된 데이터를 재암호화할 수 있는 전용 도구가 필요합니다.',
42
+ },
43
+ {
44
+ type: 'stats',
45
+ columns: 4,
46
+ items: [
47
+ { label: '클라이언트 처리 개인정보 보호', value: '100% 로컬' },
48
+ { label: '지원되는 디코더', value: 'Base64 / XOR / JSON' },
49
+ { label: '디코딩 지연 시간', value: '0 ms' },
50
+ { label: '데이터 유출 위험', value: '0%' },
51
+ ],
52
+ },
53
+ {
54
+ type: 'title',
55
+ level: 2,
56
+ text: '난독화 기법 비교',
57
+ },
58
+ {
59
+ type: 'comparative',
60
+ columns: 3,
61
+ items: [
62
+ {
63
+ title: 'Base64 인코딩',
64
+ description: '메모장에서의 단순 텍스트 수정을 방지하는 경량 변환 방식이지만 암호학적 보안성은 제공하지 않습니다.',
65
+ },
66
+ {
67
+ title: 'XOR 마스킹 + Base64',
68
+ description: '인디 게임 개발의 표준적 방식. 비밀키와 비트 연산을 조합하여 치트 엔진이나 메모리 변조를 방지합니다.',
69
+ },
70
+ {
71
+ title: '일반 JSON 페이로드',
72
+ description: '암호화되지 않은 읽기 가능한 상태. 초기 프로토타이핑 및 디버그 빌드에 적합합니다.',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ type: 'title',
78
+ level: 2,
79
+ text: '저장 상태 검증을 위한 QA 테스트 관행',
80
+ },
81
+ {
82
+ type: 'tip',
83
+ title: 'QA 과정에서의 저장 파일 보안 모범 사례',
84
+ html: '내부 빌드와 프로덕션 빌드에서 항상 서로 다른 디버그 키를 사용하세요. 경계 조건 버그를 확인할 때 로컬 트리 에디터를 사용하면 재컴파일 없이 빠르게 테스트할 수 있습니다.',
85
+ },
86
+ {
87
+ type: 'title',
88
+ level: 2,
89
+ text: '게임 상태 매개변수 가이드라인 표',
90
+ },
91
+ {
92
+ type: 'table',
93
+ headers: ['데이터 유형', '권장 형식', '일반적인 사용 사례', '난독화 레이어'],
94
+ rows: [
95
+ ['숫자 정수', '32비트 정수', '골드, 레벨, 경험치, 탄약', 'XOR 마스킹'],
96
+ ['불리언 플래그', '표준 불리언', '튜토리얼 완료, 보스 처치', 'Base64 / XOR'],
97
+ ['중첩된 객체', 'JSON 계층 구조', '플레이어 인벤토리, 스킬 트리', 'Base64 인코딩'],
98
+ ['타임스탬프 문자열', 'ISO 8601 UTC', '일일 출석, 저장 시간', 'XOR 마스킹'],
99
+ ],
100
+ },
101
+ {
102
+ type: 'title',
103
+ level: 2,
104
+ text: '역공학 및 변조 방지 고려 사항',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: '클라이언트 측 난독화는 일반 사용자의 저장 파일 수정을 방지하지만, XOR 연산과 Base64는 완벽한 암호화 알고리즘이 아닙니다. RenderDoc이나 x64dbg 같은 디버깅 도구를 사용하면 컴파일된 어셈블리에서 키 생성 루틴을 직접 분석할 수 있습니다. 멀티플레이어 게임의 경우 서버 측 검증이나 HMAC 서명 검증을 결합하는 것이 필수적입니다.',
109
+ },
110
+ ],
111
+ faqTitle: '자주 묻는 질문',
112
+ faq: [
113
+ {
114
+ question: '제 게임 저장 파일이 원격 서버로 업로드되나요?',
115
+ answer: '아니요. 모든 디코딩, JSON 트리 편집, 재암호화 작업은 100% 사용자의 웹 브라우저 JavaScript 엔진 내에서만 실행됩니다.',
116
+ },
117
+ {
118
+ question: 'Unity나 Godot 같은 게임 엔진에서 XOR 난독화는 어떻게 작동하나요?',
119
+ answer: '직렬화된 JSON 문자열의 UTF-8 바이트에 대해 지정된 비밀키 문자열과 비트 XOR 연산을 수행한 후 결과를 Base64로 인코딩합니다.',
120
+ },
121
+ ],
122
+ howTo: [
123
+ {
124
+ name: '저장 파일 불러오기 또는 붙여넣기',
125
+ text: '암호화된 저장 파일을 업로드하거나 예시 템플릿을 선택합니다.',
126
+ },
127
+ {
128
+ name: '디코딩 방식 및 키 선택',
129
+ text: 'Base64 또는 XOR 마스킹을 선택하고 비밀키를 입력한 후 디코딩을 클릭합니다.',
130
+ },
131
+ {
132
+ name: 'JSON 상태 수정',
133
+ text: '라이브 에디터를 통해 레벨, 골드, 아이템, 게임 플래그 값을 원하는 대로 수정합니다.',
134
+ },
135
+ {
136
+ name: '암호화 및 내보내기',
137
+ text: '출력 형식을 지정하고 게임 테스트에 사용할 저장 파일을 다운로드합니다.',
138
+ },
139
+ ],
140
+ schemas: [
141
+ {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'SoftwareApplication',
144
+ name: '게임 저장 파일 에디터',
145
+ applicationCategory: 'DeveloperApplication',
146
+ operatingSystem: 'Any',
147
+ offers: {
148
+ '@type': 'Offer',
149
+ price: '0',
150
+ priceCurrency: 'KRW',
151
+ },
152
+ },
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: [
157
+ {
158
+ '@type': 'Question',
159
+ name: '제 게임 저장 파일이 원격 서버로 업로드되나요?',
160
+ acceptedAnswer: {
161
+ '@type': 'Answer',
162
+ text: '아니요. 모든 처리 과정은 100% 브라우저 내부에서만 수행됩니다.',
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'HowTo',
170
+ name: '암호화된 게임 저장 파일을 수정하는 방법',
171
+ step: [
172
+ {
173
+ '@type': 'HowToStep',
174
+ name: '저장 파일 불러오기',
175
+ text: '암호화된 저장 파일을 업로드합니다.',
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ bibliographyTitle: '참고 문헌 및 관련 자료',
181
+ bibliography: bibliographyEntries,
182
+ };
@@ -0,0 +1,182 @@
1
+ import type { ToolLocaleContent } from '../../../types';
2
+ import type { SaveFileEditorUI } from '../ui';
3
+ import { bibliographyEntries } from '../bibliography';
4
+
5
+ export const content: ToolLocaleContent<SaveFileEditorUI> = {
6
+ slug: 'game-save-bestand-editor',
7
+ title: 'Game Save Bestand Obfuscator en Editor',
8
+ description: 'Ontsleutel, inspecteer, bewerk JSON payloads en versleutel game save bestanden opnieuw met Base64, XOR masking of platte tekst 100% lokaal in je browser.',
9
+ ui: {
10
+ title: 'Game Save Bestand Obfuscator & Editor',
11
+ subtitle: 'Inspecteer, wijzig en versleutel lokale save bestanden veilig zonder serverlekken',
12
+ dropSaveFile: 'Sleep het game save bestand hier naartoe',
13
+ orSelectFile: 'of klik om een lokaal bestand te kiezen',
14
+ encryptionMethod: 'Versleutelingsformaat',
15
+ methodBase64: 'Base64 Codering',
16
+ methodXor: 'XOR Masker + Base64',
17
+ methodRaw: 'Platte JSON / Onversleuteld',
18
+ xorKeyLabel: 'XOR Geheime Sleutel',
19
+ xorKeyPlaceholder: 'bijv. MijnGeheimeSleutel2026',
20
+ jsonRawTitle: 'Gedecodeerde JSON Payload (Live Editor)',
21
+ encodeAndDownload: 'Versleutelen & Bestand Downloaden',
22
+ copyEncoded: 'Kopieer Versleutelde Tekst',
23
+ copiedNotice: 'Gekopieerd naar Klembord!',
24
+ decodedKeysCount: 'Totaal Aantal Parameters',
25
+ dataSize: 'Payload Grootte',
26
+ detectedFormat: 'Gedetecteerd Formaat',
27
+ exportPreviewLabel: 'Voorbeeld van Versleutelde Uitvoer',
28
+ decodePanelTitle: 'Decoderen en Live JSON Editor',
29
+ exportPanelTitle: 'Opnieuw Versleutelde Uitvoer',
30
+ decodeError: 'Het ontcijferen van het save bestand is mislukt',
31
+ bytesUnit: 'B',
32
+ },
33
+ seo: [
34
+ {
35
+ type: 'title',
36
+ level: 2,
37
+ text: 'Veiligheid en Obfuscantie Protocollen voor Game Saves',
38
+ },
39
+ {
40
+ type: 'paragraph',
41
+ html: 'Videogames serialiseren de voortgang van spelers naar permanente opslagformaten om inventarissen, vrijgespeelde niveaus en spelerattributen te bewaren tussen speelsessies. Om onbevoegde aanpassingen in gewone tekstverwerkers door eindgebruikers te voorkomen, obfusceren gamestudio s savebestanden met binaire coderingen zoals Base64 of bitwise XOR-maskering met een geheime sleutel. Tijdens interne QA-tests en live operaties debugging hebben ontwikkelingsteams directe toegang nodig om ruwe JSON-structuren te inspecteren, grenswaarden te testen en gewijzigde gegevens opnieuw te versleutelen zonder de game opnieuw te compileren.',
42
+ },
43
+ {
44
+ type: 'stats',
45
+ columns: 4,
46
+ items: [
47
+ { label: 'Client Verwerkingsprivacy', value: '100% Lokaal' },
48
+ { label: 'Ondersteunde Decoders', value: 'Base64 / XOR / JSON' },
49
+ { label: 'Decodeer Latentie', value: '0 ms' },
50
+ { label: 'Datalek Risico', value: 'Nul' },
51
+ ],
52
+ },
53
+ {
54
+ type: 'title',
55
+ level: 2,
56
+ text: 'Vergelijking van Obfuscantie Schema s',
57
+ },
58
+ {
59
+ type: 'comparative',
60
+ columns: 3,
61
+ items: [
62
+ {
63
+ title: 'Base64 Codering',
64
+ description: 'Snelle tekstconversie die eenvoudige bewerkingen in Kladblok voorkomt, maar geen echte cryptografische beveiliging biedt.',
65
+ },
66
+ {
67
+ title: 'XOR Maskering + Base64',
68
+ description: 'Standaardpraktijk bij indie gameontwikkeling. Mengt tekstbytes met een geheime sleutel tegen geheugen-editors.',
69
+ },
70
+ {
71
+ title: 'Platte JSON Payload',
72
+ description: 'Leesbare save-status zonder versleuteling. Ideaal voor prototypes en interne team-iteraties.',
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ type: 'title',
78
+ level: 2,
79
+ text: 'QA Testpraktijken voor Verificatie van Save Status',
80
+ },
81
+ {
82
+ type: 'tip',
83
+ title: 'Beste Praktijken voor Game Save Beveiliging tijdens QA',
84
+ html: 'Gebruik altijd afzonderlijke debugsleutels voor interne builds. Gebruik lokale inspecteurs om grenswaarden en statistieken te testen zonder de gamecode opnieuw te compileren.',
85
+ },
86
+ {
87
+ type: 'title',
88
+ level: 2,
89
+ text: 'Tabel met Richtlijnen voor Spelstatus Parameters',
90
+ },
91
+ {
92
+ type: 'table',
93
+ headers: ['Datatype', 'Aanbevolen Formaat', 'Veelvoorkomende Toepassing', 'Obfuscantielaag'],
94
+ rows: [
95
+ ['Numerieke Gehele Getallen', '32-bit Integer', 'Munten, Level, XP, Munitie', 'XOR Gemaskerd'],
96
+ ['Booleaanse Vlaggen', 'Standaard Boolean', 'Tutorial Voltooid, Baas Verslagen', 'Base64 / XOR'],
97
+ ['Geneste Objecten', 'JSON Hiërarchie', 'Spelersinventaris, Vaardigheden', 'Base64 Gecodeerd'],
98
+ ['Tijdstempel Strings', 'ISO 8601 UTC', 'Dagelijkse Login, Opslagtijdstempel', 'XOR Gemaskerd'],
99
+ ],
100
+ },
101
+ {
102
+ type: 'title',
103
+ level: 2,
104
+ text: 'Reverse Engineering en Anti Tamper Overwegingen',
105
+ },
106
+ {
107
+ type: 'paragraph',
108
+ html: 'Hoewel obfuscantie aan de clientzijde voorkomt dat incidentele spelers opslagbestanden wijzigen in standaard tekstverwerkers, zijn XOR en Base64 geen cryptografische algoritmen. Geheugenscanners en tools zoals RenderDoc of x64dbg kunnen sleutelgeneratieroutines in gecompileerde bestanden inspecteren. Voor competitieve games zijn serververificatie of cryptografische HMAC-handtekeningen essentieel.',
109
+ },
110
+ ],
111
+ faqTitle: 'Veelgestelde Vragen',
112
+ faq: [
113
+ {
114
+ question: 'Worden mijn game save bestanden geüpload naar een externe server?',
115
+ answer: 'Nee. Alle decodering, JSON-structuurbewerking en her-versleuteling vinden 100% plaats binnen je eigen webbrowser.',
116
+ },
117
+ {
118
+ question: 'Hoe werkt XOR-sleutelobfuscantie in game-engines zoals Unity of Godot?',
119
+ answer: 'XOR-obfuscantie voert bitwise XOR-operaties uit op UTF-8 bytes van de JSON-string met de tekens van een geheime sleutel.',
120
+ },
121
+ ],
122
+ howTo: [
123
+ {
124
+ name: 'Bestand Laden of Plakken',
125
+ text: 'Upload je versleutelde savebestand of sleep het naar de uploadzone.',
126
+ },
127
+ {
128
+ name: 'Selecteer Decodeermethode en Sleutel',
129
+ text: 'Kies Base64 of XOR Maskering en voer de geheime sleutel in.',
130
+ },
131
+ {
132
+ name: 'JSON Status Bewerken',
133
+ text: 'Pas waarden voor niveau, goud, inventaris en spelvlaggen direct aan in de live editor.',
134
+ },
135
+ {
136
+ name: 'Versleutelen en Exporteren',
137
+ text: 'Download het gewijzigde savebestand gereed voor testen in de game.',
138
+ },
139
+ ],
140
+ schemas: [
141
+ {
142
+ '@context': 'https://schema.org',
143
+ '@type': 'SoftwareApplication',
144
+ name: 'Game Save Bestand Editor',
145
+ applicationCategory: 'DeveloperApplication',
146
+ operatingSystem: 'Any',
147
+ offers: {
148
+ '@type': 'Offer',
149
+ price: '0',
150
+ priceCurrency: 'EUR',
151
+ },
152
+ },
153
+ {
154
+ '@context': 'https://schema.org',
155
+ '@type': 'FAQPage',
156
+ mainEntity: [
157
+ {
158
+ '@type': 'Question',
159
+ name: 'Worden mijn game save bestanden geüpload naar een externe server?',
160
+ acceptedAnswer: {
161
+ '@type': 'Answer',
162
+ text: 'Nee. Alle verwerkingen vinden 100% lokaal in je browser plaats.',
163
+ },
164
+ },
165
+ ],
166
+ },
167
+ {
168
+ '@context': 'https://schema.org',
169
+ '@type': 'HowTo',
170
+ name: 'Hoe Versleutelde Game Save Bestanden te Bewerken',
171
+ step: [
172
+ {
173
+ '@type': 'HowToStep',
174
+ name: 'Bestand Laden',
175
+ text: 'Upload je versleutelde savebestand.',
176
+ },
177
+ ],
178
+ },
179
+ ],
180
+ bibliographyTitle: 'Referenties en Verder Lezen',
181
+ bibliography: bibliographyEntries,
182
+ };