pelock-stringencrypt 1.0.1
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.
- checksums.yaml +7 -0
- data/LICENSE +203 -0
- data/README.md +2362 -0
- data/lib/stringencrypt/client.rb +286 -0
- data/lib/stringencrypt/command.rb +9 -0
- data/lib/stringencrypt/error_code.rb +19 -0
- data/lib/stringencrypt/http.rb +85 -0
- data/lib/stringencrypt/language.rb +28 -0
- data/lib/stringencrypt/new_line.rb +9 -0
- data/lib/stringencrypt/version.rb +5 -0
- data/lib/stringencrypt.rb +9 -0
- metadata +52 -0
data/README.md
ADDED
|
@@ -0,0 +1,2362 @@
|
|
|
1
|
+
# StringEncrypt — String & File Encryption for Ruby Developers
|
|
2
|
+
|
|
3
|
+
[](LICENSE)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
[StringEncrypt](https://www.stringencrypt.com) allows you to **encrypt strings and files** using a randomly generated algorithm, generating a unique decryption code (so-called [polymorphic code](https://www.pelock.com/articles/polymorphic-encryption-algorithms)) each time in the selected programming language.
|
|
7
|
+
|
|
8
|
+
## Available editions
|
|
9
|
+
|
|
10
|
+
StringEncrypt can be used:
|
|
11
|
+
|
|
12
|
+
* Directly on its website - https://www.stringencrypt.com/
|
|
13
|
+
* You can download standalone Windows client - https://www.stringencrypt.com/download/
|
|
14
|
+
* You can use it via WebAPI interface https://www.stringencrypt.com/api/
|
|
15
|
+
* Visual Studio Code extension - https://marketplace.visualstudio.com/items?itemName=PELock.stringencrypt
|
|
16
|
+
* VS Code based editors (like Cursor etc.) - https://open-vsx.org/extension/PELock/stringencrypt
|
|
17
|
+
|
|
18
|
+
## Plain text PHP string
|
|
19
|
+
|
|
20
|
+
```php
|
|
21
|
+
// $secret = "PHP string encryption"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Encrypted string in PHP source code format
|
|
25
|
+
|
|
26
|
+
```php
|
|
27
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [PHP]
|
|
28
|
+
// Encoding: Windows-1250 or match your source file
|
|
29
|
+
// $secret = "PHP string encryption"
|
|
30
|
+
$secret = [ 0x8E, 0x40, 0x56, 0xAE, 0x7A, 0x0B, 0x1D, 0x51,
|
|
31
|
+
0x5D, 0x63, 0x13, 0xDA, 0x6E, 0x3F, 0xDB, 0x5E,
|
|
32
|
+
0xB9, 0x79, 0x1F, 0xA6, 0x17 ];
|
|
33
|
+
|
|
34
|
+
$DGEPd = 0;
|
|
35
|
+
for ($PBbql = 0; $PBbql < 21; $PBbql++)
|
|
36
|
+
{
|
|
37
|
+
$DGEPd = $secret[$PBbql];
|
|
38
|
+
for ($pNjYM = 0; $pNjYM < 4; $pNjYM++)
|
|
39
|
+
{
|
|
40
|
+
$DGEPd = ($DGEPd ^ 0x3D) & 0xFF;
|
|
41
|
+
$DGEPd = (((~($DGEPd & 0xFF)) & 0xFF) + 1) & 0xFF;
|
|
42
|
+
}
|
|
43
|
+
$DGEPd = ($DGEPd ^ 0xB6) & 0xFF;
|
|
44
|
+
$DGEPd = ($DGEPd ^ $PBbql) & 0xFF;
|
|
45
|
+
for ($XnxLS = 0; $XnxLS < 2; $XnxLS++)
|
|
46
|
+
{
|
|
47
|
+
for ($qoZCp = 0; $qoZCp < 4; $qoZCp++)
|
|
48
|
+
{
|
|
49
|
+
$DGEPd = ((($DGEPd & 0xFF) >> 7) | (($DGEPd & 0xFF) << 1)) & 0xFF;
|
|
50
|
+
}
|
|
51
|
+
for ($CsgJZ = 0; $CsgJZ < 4; $CsgJZ++)
|
|
52
|
+
{
|
|
53
|
+
for ($VwNLz = 0; $VwNLz < 3; $VwNLz++)
|
|
54
|
+
{
|
|
55
|
+
$DGEPd = ($DGEPd ^ ((($DGEPd & 0xFF) << 4) & 0xFF)) & 0xFF;
|
|
56
|
+
$DGEPd = ((($DGEPd & 0xFF) >> 4) | (($DGEPd & 0xFF) << 4)) & 0xFF;
|
|
57
|
+
}
|
|
58
|
+
$DGEPd = (($DGEPd & 0xFF) + 1) & 0xFF;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
$DGEPd = (($DGEPd & 0xFF) + 0xD0) & 0xFF;
|
|
62
|
+
$DGEPd = ((($DGEPd & 0xFF) >> 4) | (($DGEPd & 0xFF) << 4)) & 0xFF;
|
|
63
|
+
for ($cUyMk = 0; $cUyMk < 3; $cUyMk++)
|
|
64
|
+
{
|
|
65
|
+
$DGEPd = (($DGEPd & 0xFF) + 1) & 0xFF;
|
|
66
|
+
$DGEPd = ((($DGEPd & 0xFF) << ($PBbql % 8)) | (($DGEPd & 0xFF) >> (8 - ($PBbql % 8)))) & 0xFF;
|
|
67
|
+
}
|
|
68
|
+
for ($UmJxX = 0; $UmJxX < 2; $UmJxX++)
|
|
69
|
+
{
|
|
70
|
+
for ($RGWvx = 0; $RGWvx < 4; $RGWvx++)
|
|
71
|
+
{
|
|
72
|
+
for ($xNBhy = 0; $xNBhy < 4; $xNBhy++)
|
|
73
|
+
{
|
|
74
|
+
$DGEPd = (($DGEPd & 0xFF) - 0x27) & 0xFF;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
$DGEPd = (($DGEPd & 0xFF) + 1) & 0xFF;
|
|
79
|
+
for ($lJFgB = 0; $lJFgB < 3; $lJFgB++)
|
|
80
|
+
{
|
|
81
|
+
$DGEPd = ($DGEPd ^ $PBbql) & 0xFF;
|
|
82
|
+
$DGEPd = ((($DGEPd & 0xFF) << ($PBbql % 8)) | (($DGEPd & 0xFF) >> (8 - ($PBbql % 8)))) & 0xFF;
|
|
83
|
+
for ($nGAaX = 0; $nGAaX < 2; $nGAaX++)
|
|
84
|
+
{
|
|
85
|
+
for ($RMrYp = 0; $RMrYp < 4; $RMrYp++)
|
|
86
|
+
{
|
|
87
|
+
$DGEPd = ($DGEPd ^ 0xFF) & 0xFF;
|
|
88
|
+
}
|
|
89
|
+
for ($pUZjW = 0; $pUZjW < 4; $pUZjW++)
|
|
90
|
+
{
|
|
91
|
+
$DGEPd = (($DGEPd & 0xFF) - $PBbql) & 0xFF;
|
|
92
|
+
}
|
|
93
|
+
$DGEPd = ($DGEPd ^ (($DGEPd & 0xFF) >> 6)) & 0xFF;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
$DGEPd = ($DGEPd ^ 0x27) & 0xFF;
|
|
97
|
+
for ($QHPSD = 0; $QHPSD < 3; $QHPSD++)
|
|
98
|
+
{
|
|
99
|
+
$DGEPd = (($DGEPd & 0xFF) + 0x6C) & 0xFF;
|
|
100
|
+
}
|
|
101
|
+
for ($PquxI = 0; $PquxI < 4; $PquxI++)
|
|
102
|
+
{
|
|
103
|
+
$DGEPd = (($DGEPd & 0xFF) - 1) & 0xFF;
|
|
104
|
+
for ($yCWuE = 0; $yCWuE < 2; $yCWuE++)
|
|
105
|
+
{
|
|
106
|
+
$DGEPd = (($DGEPd & 0xFF) - 0xAF) & 0xFF;
|
|
107
|
+
for ($DFgxE = 0; $DFgxE < 4; $DFgxE++)
|
|
108
|
+
{
|
|
109
|
+
$DGEPd = (($DGEPd & 0xFF) + 0x1D) & 0xFF;
|
|
110
|
+
$DGEPd = ($DGEPd ^ 0xFF) & 0xFF;
|
|
111
|
+
}
|
|
112
|
+
$DGEPd = (($DGEPd & 0xFF) + 1) & 0xFF;
|
|
113
|
+
}
|
|
114
|
+
for ($uadXk = 0; $uadXk < 4; $uadXk++)
|
|
115
|
+
{
|
|
116
|
+
$DGEPd = ($DGEPd ^ $PBbql) & 0xFF;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
$secret[$PBbql] = $DGEPd;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
$secret = implode('', array_map(function ($c) { return chr($c & 0xFF); }, $secret));
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
echo secret;
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## The problem with plain text strings
|
|
129
|
+
|
|
130
|
+
I'm a developer, and I love programming. I'm also an avid [reverse engineer](https://www.pelock.com/services). I perform a wide array of software analysis in my daily work and sometimes I find things in compiled applications that **shouldn't be exposed** to the first person with a simple hex-editor in hand.
|
|
131
|
+
|
|
132
|
+
### What can be found in application binaries?
|
|
133
|
+
|
|
134
|
+
Everything! I've listed a few examples of the things I found below. Sometimes these things shouldn't even be included in applications at all (they are there due to poor design choices or rushed work), but some are just cannot be avoided.
|
|
135
|
+
|
|
136
|
+
* API keys
|
|
137
|
+
* Database passwords
|
|
138
|
+
* FTP passwords
|
|
139
|
+
* Login credentials
|
|
140
|
+
* Encryption & decryption keys
|
|
141
|
+
* Custom code scripts in readable text
|
|
142
|
+
* Complex SQL queries in plain text
|
|
143
|
+
* Hidden website endpoints
|
|
144
|
+
* BitCoin wallets locations
|
|
145
|
+
* ...and many more
|
|
146
|
+
|
|
147
|
+
Ask yourself, did you ever put some sensitive content in your software that you later regret?
|
|
148
|
+
|
|
149
|
+
### Why should I care?
|
|
150
|
+
|
|
151
|
+
If any of these things were to fall into the **wrong hands**, they could be used to compromise your software or your infrastructure.
|
|
152
|
+
|
|
153
|
+

|
|
154
|
+
|
|
155
|
+
Take for example database passwords. A competitor could use them to view your database structure or dump all of its contents. You don't want to lose all your hard work because someone with a simple hex-editor can discover your password in plain text.
|
|
156
|
+
|
|
157
|
+
## The solution — String Encrypt
|
|
158
|
+
|
|
159
|
+
I've decided to create a simple service called String Encrypt for developers, offering fast string & file encryption without the need to write custom encryption tools over and over again because I did that many times.
|
|
160
|
+
|
|
161
|
+
String Encrypt can help you hide the things that shouldn't be visible at first glance to anyone with a hex-editor.
|
|
162
|
+
|
|
163
|
+

|
|
164
|
+
|
|
165
|
+
### Say hello to polymorphic encryption!
|
|
166
|
+
|
|
167
|
+
Forget about simple `xor` encryption! StringEncrypt comes with a unique encryption engine.
|
|
168
|
+
|
|
169
|
+
It's a **polymorphic encryption engine**, similar to the encryption methods used by the software protection solutions and advanced computer viruses.
|
|
170
|
+
|
|
171
|
+
### How it works?
|
|
172
|
+
|
|
173
|
+
Let me explain how the polymorphic encryption process works.
|
|
174
|
+
|
|
175
|
+
1. A random set of encryption commands is selected (`xor`, `addition`, `subtraction`, `bit rotations`, `bit shifts`, `logical negation` etc.).
|
|
176
|
+
2. A random set of helper `encryption keys` is generated.
|
|
177
|
+
3. Every byte of the input string is encrypted with every encryption command in the random set.
|
|
178
|
+
4. Nested encryption loops are constructed
|
|
179
|
+
5. The decryption code in the selected programming language is generated with a reverse set of encryption commands.
|
|
180
|
+
|
|
181
|
+
You can learn more about polymorphic engines from my articles and projects:
|
|
182
|
+
|
|
183
|
+
* How to build a polymorphic engine in C++ - https://www.pelock.com/articles/polymorphic-encryption-algorithms
|
|
184
|
+
* Polymorphic engine in 32-bit MASM assembler - https://github.com/PELock/Simple-Polymorphic-Engine-SPE32
|
|
185
|
+
* Poly Polymorphic Engine - https://www.pelock.com/products/poly-polymorphic-engine
|
|
186
|
+
|
|
187
|
+
### What does it mean?
|
|
188
|
+
|
|
189
|
+
The encrypted content is **different** every time you apply StringEncrypt encryption to it.
|
|
190
|
+
|
|
191
|
+
The algorithm is always **unique**, the encryption keys are always **randomly selected** and the decryption code is also **unique** for every time you use our encryption.
|
|
192
|
+
|
|
193
|
+
## StringEncrypt features
|
|
194
|
+
|
|
195
|
+
* Out of box support for `UNICODE` (WideChar type in `C/C++` languages), `UTF-8` (multibyte) & `ANSI` (single byte) strings encodings
|
|
196
|
+
* Configurable minimum & maximum number of encryption commands
|
|
197
|
+
* Different ways to store the encrypted string (as a `global` or `local` variable if the selected programming language supports it)
|
|
198
|
+
* Wide array of supported programming languages
|
|
199
|
+
* You can automate the encryption process in your builds using our `WebAPI` interface (`PHP` and `Python` bindings)
|
|
200
|
+
|
|
201
|
+
## How to use StringEncrypt from Ruby code?
|
|
202
|
+
|
|
203
|
+
The preferred way to install the Web API SDK is via RubyGems.
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
gem install pelock-stringencrypt
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```ruby
|
|
210
|
+
require "stringencrypt"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
The gem is published at https://rubygems.org/gems/pelock-stringencrypt
|
|
214
|
+
|
|
215
|
+
## Usage examples
|
|
216
|
+
|
|
217
|
+
### Example — `encrypt_simple.rb`
|
|
218
|
+
|
|
219
|
+
```ruby
|
|
220
|
+
# frozen_string_literal: true
|
|
221
|
+
|
|
222
|
+
###############################################################################
|
|
223
|
+
#
|
|
224
|
+
# StringEncrypt — encrypt a string
|
|
225
|
+
#
|
|
226
|
+
# Version : v1.0.1
|
|
227
|
+
# Language : Ruby
|
|
228
|
+
# Author : Bartosz Wójcik
|
|
229
|
+
# Web page : https://www.pelock.com
|
|
230
|
+
#
|
|
231
|
+
###############################################################################
|
|
232
|
+
|
|
233
|
+
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
|
|
234
|
+
require "stringencrypt"
|
|
235
|
+
|
|
236
|
+
client = StringEncrypt.new("YOUR-API-KEY-HERE")
|
|
237
|
+
result = client.encrypt_string("Hello!", "$label")
|
|
238
|
+
|
|
239
|
+
if result == false
|
|
240
|
+
warn "Cannot connect to the API."
|
|
241
|
+
exit 1
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
if result["error"] != StringEncrypt::ErrorCode::SUCCESS
|
|
245
|
+
warn "API error: #{result["error"]}"
|
|
246
|
+
exit 1
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
puts result["source"]
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Example — `info.rb`
|
|
253
|
+
|
|
254
|
+
```ruby
|
|
255
|
+
# frozen_string_literal: true
|
|
256
|
+
|
|
257
|
+
###############################################################################
|
|
258
|
+
#
|
|
259
|
+
# StringEncrypt — info
|
|
260
|
+
#
|
|
261
|
+
# Version : v1.0.1
|
|
262
|
+
# Language : Ruby
|
|
263
|
+
# Author : Bartosz Wójcik
|
|
264
|
+
# Web page : https://www.pelock.com
|
|
265
|
+
#
|
|
266
|
+
###############################################################################
|
|
267
|
+
|
|
268
|
+
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
|
|
269
|
+
require "stringencrypt"
|
|
270
|
+
|
|
271
|
+
client = StringEncrypt.new("YOUR-API-KEY-HERE")
|
|
272
|
+
client.set_command(StringEncrypt::Command::INFO)
|
|
273
|
+
p client.send
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Example — `is_demo.rb`
|
|
277
|
+
|
|
278
|
+
```ruby
|
|
279
|
+
# frozen_string_literal: true
|
|
280
|
+
|
|
281
|
+
###############################################################################
|
|
282
|
+
#
|
|
283
|
+
# StringEncrypt — is_demo
|
|
284
|
+
#
|
|
285
|
+
# Version : v1.0.1
|
|
286
|
+
# Language : Ruby
|
|
287
|
+
# Author : Bartosz Wójcik
|
|
288
|
+
# Web page : https://www.pelock.com
|
|
289
|
+
#
|
|
290
|
+
###############################################################################
|
|
291
|
+
|
|
292
|
+
$LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
|
|
293
|
+
require "stringencrypt"
|
|
294
|
+
|
|
295
|
+
p StringEncrypt.new("YOUR-API-KEY-HERE").is_demo
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
See the `examples/` directory in this repository for complete samples.
|
|
299
|
+
|
|
300
|
+
## Supported programming languages
|
|
301
|
+
|
|
302
|
+
StringEncrypt engine supports code generation for the following programming languages:
|
|
303
|
+
|
|
304
|
+
* [C & C++](https://www.stringencrypt.com/c-cpp-encryption/)
|
|
305
|
+
* [C# (C Sharp for .NET)](https://www.stringencrypt.com/c-sharp-encryption/)
|
|
306
|
+
* [Visual Basic .NET (VB.NET)](https://www.stringencrypt.com/visual-basic-net-vb-net-encryption/)
|
|
307
|
+
* [Delphi / Pascal](https://www.stringencrypt.com/delphi-pascal-encryption/)
|
|
308
|
+
* [Java](https://www.stringencrypt.com/java-encryption/)
|
|
309
|
+
* [Kotlin](https://www.stringencrypt.com/kotlin-encryption/)
|
|
310
|
+
* [JavaScript](https://www.stringencrypt.com/javascript-encryption/)
|
|
311
|
+
* [Python](https://www.stringencrypt.com/python-encryption/)
|
|
312
|
+
* [PHP](https://www.stringencrypt.com/php-encryption/)
|
|
313
|
+
* [Ruby](https://www.stringencrypt.com/ruby-encryption/)
|
|
314
|
+
* [Dart](https://www.stringencrypt.com/dart-encryption/)
|
|
315
|
+
* [Go](https://www.stringencrypt.com/go-encryption/)
|
|
316
|
+
* [Rust](https://www.stringencrypt.com/rust-encryption/)
|
|
317
|
+
* [Swift](https://www.stringencrypt.com/swift-encryption/)
|
|
318
|
+
* [Lua](https://www.stringencrypt.com/lua-encryption/)
|
|
319
|
+
* [Objective-C](https://www.stringencrypt.com/objective-c-encryption/)
|
|
320
|
+
* [AutoIt](https://www.stringencrypt.com/autoit-encryption/)
|
|
321
|
+
* [PowerShell](https://www.stringencrypt.com/powershell-encryption/)
|
|
322
|
+
* [Haskell](https://www.stringencrypt.com/haskell-encryption/)
|
|
323
|
+
* [MASM assembler](https://www.stringencrypt.com/masm-encryption/)
|
|
324
|
+
* [FASM assembler](https://www.stringencrypt.com/fasm-encryption/)
|
|
325
|
+
* [NASM assembler](https://www.stringencrypt.com/nasm-encryption/)
|
|
326
|
+
|
|
327
|
+
Some examples of generated source code for supported programming languages (**with display / run example** enabled, matching the full client `include example` option):
|
|
328
|
+
|
|
329
|
+
### C/C++ encryption (UNICODE example)
|
|
330
|
+
|
|
331
|
+
```cpp
|
|
332
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [C/C++]
|
|
333
|
+
#include <cstdio>
|
|
334
|
+
#include <cwchar>
|
|
335
|
+
// wszLabel = "C/C++ String Encryption"
|
|
336
|
+
wchar_t wszLabel[24];
|
|
337
|
+
|
|
338
|
+
wszLabel[20] = 0xEDD6; wszLabel[22] = 0xA64D; wszLabel[3] = 0x733C; wszLabel[19] = 0x96B6;
|
|
339
|
+
wszLabel[12] = 0xBCA7; wszLabel[6] = 0xDBD5; wszLabel[18] = 0x8D05; wszLabel[1] = 0xD61B;
|
|
340
|
+
wszLabel[9] = 0x16AC; wszLabel[13] = 0xCA4A; wszLabel[16] = 0xAB02; wszLabel[8] = 0xB392;
|
|
341
|
+
wszLabel[21] = 0xE785; wszLabel[10] = 0x18AB; wszLabel[14] = 0x2AF8; wszLabel[23] = 0x7099;
|
|
342
|
+
wszLabel[5] = 0xAF1B; wszLabel[15] = 0xFC72; wszLabel[7] = 0x05AE; wszLabel[0] = 0x9BF3;
|
|
343
|
+
wszLabel[2] = 0x14D8; wszLabel[4] = 0xD30F; wszLabel[11] = 0xEDE7; wszLabel[17] = 0x1158;
|
|
344
|
+
|
|
345
|
+
for (volatile unsigned int iZASt = 0, tmLMB = 0; iZASt < 24; iZASt++)
|
|
346
|
+
{
|
|
347
|
+
tmLMB = wszLabel[iZASt];
|
|
348
|
+
for (unsigned int sfIcm = 0; sfIcm < 2; sfIcm++)
|
|
349
|
+
{
|
|
350
|
+
for (unsigned int MUhVa = 0; MUhVa < 3; MUhVa++)
|
|
351
|
+
{
|
|
352
|
+
tmLMB = (tmLMB ^ (((tmLMB & 0xFFFF) << 15) & 0xFFFF)) & 0xFFFF;
|
|
353
|
+
tmLMB = (((tmLMB & 0xFFFF) << (iZASt % 16)) | ((tmLMB & 0xFFFF) >> (16 - (iZASt % 16)))) & 0xFFFF;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
tmLMB = (tmLMB ^ 0x2BFD) & 0xFFFF;
|
|
357
|
+
tmLMB = (((tmLMB & 0xFFFF) >> 8) | ((tmLMB & 0xFFFF) << 8)) & 0xFFFF;
|
|
358
|
+
for (unsigned int qiTBF = 0; qiTBF < 2; qiTBF++)
|
|
359
|
+
{
|
|
360
|
+
tmLMB = ((tmLMB & 0xFFFF) - iZASt) & 0xFFFF;
|
|
361
|
+
tmLMB = (((tmLMB & 0xFFFF) >> 8) | ((tmLMB & 0xFFFF) << 8)) & 0xFFFF;
|
|
362
|
+
}
|
|
363
|
+
tmLMB = ((tmLMB & 0xFFFF) - 0x51B1) & 0xFFFF;
|
|
364
|
+
tmLMB = (((tmLMB & 0xFFFF) >> 8) | ((tmLMB & 0xFFFF) << 8)) & 0xFFFF;
|
|
365
|
+
tmLMB = ((tmLMB ^ 0xFFFF) & 0xFFFF);
|
|
366
|
+
tmLMB = ((tmLMB & 0xFFFF) + iZASt) & 0xFFFF;
|
|
367
|
+
for (unsigned int HOCjn = 0; HOCjn < 4; HOCjn++)
|
|
368
|
+
{
|
|
369
|
+
tmLMB = (((tmLMB & 0xFFFF) >> 8) | ((tmLMB & 0xFFFF) << 8)) & 0xFFFF;
|
|
370
|
+
tmLMB = ((tmLMB & 0xFFFF) - iZASt) & 0xFFFF;
|
|
371
|
+
for (unsigned int JpQxh = 0; JpQxh < 2; JpQxh++)
|
|
372
|
+
{
|
|
373
|
+
tmLMB = (((tmLMB & 0xFFFF) >> 12) | ((tmLMB & 0xFFFF) << 4)) & 0xFFFF;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
wszLabel[iZASt] = tmLMB;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
fputws(wszLabel, stdout);
|
|
380
|
+
fputwc(L'\n', stdout);
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### C# Sharp encryption (UNICODE example)
|
|
384
|
+
|
|
385
|
+
```csharp
|
|
386
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [C#]
|
|
387
|
+
// superSecretString = "Easy encryption in C#"
|
|
388
|
+
String superSecretString = "\uA1A2\uE379\uB64C\u7816\u238A\uD7E4\u0CFA\uD465" +
|
|
389
|
+
"\u7CE4\uA305\u2C46\uD27B\u533A\u6F43\u91A5\u3B36" +
|
|
390
|
+
"\u181E\uC1B8\uA827\uC1FC\u9073";
|
|
391
|
+
|
|
392
|
+
for (int ugcqt = 0, TSGdn = 0; ugcqt < 21; ugcqt++)
|
|
393
|
+
{
|
|
394
|
+
TSGdn = superSecretString[ugcqt];
|
|
395
|
+
TSGdn = (((TSGdn & 0xFFFF) << (ugcqt % 16)) | ((TSGdn & 0xFFFF) >> (16 - (ugcqt % 16)))) & 0xFFFF;
|
|
396
|
+
TSGdn = (TSGdn ^ ugcqt) & 0xFFFF;
|
|
397
|
+
for (int IjFDX = 0; IjFDX < 3; IjFDX++)
|
|
398
|
+
{
|
|
399
|
+
for (int scVKQ = 0; scVKQ < 2; scVKQ++)
|
|
400
|
+
{
|
|
401
|
+
TSGdn = (TSGdn ^ (((TSGdn & 0xFFFF) << 9) & 0xFFFF)) & 0xFFFF;
|
|
402
|
+
for (int tKeJi = 0; tKeJi < 4; tKeJi++)
|
|
403
|
+
{
|
|
404
|
+
TSGdn = (((TSGdn & 0xFFFF) << (ugcqt % 16)) | ((TSGdn & 0xFFFF) >> (16 - (ugcqt % 16)))) & 0xFFFF;
|
|
405
|
+
TSGdn = ((TSGdn & 0xFFFF) - 0x7198) & 0xFFFF;
|
|
406
|
+
TSGdn = (TSGdn ^ 0xFFFF) & 0xFFFF;
|
|
407
|
+
}
|
|
408
|
+
TSGdn = (((TSGdn & 0xFFFF) << 6) | ((TSGdn & 0xFFFF) >> 10)) & 0xFFFF;
|
|
409
|
+
}
|
|
410
|
+
TSGdn = ((TSGdn & 0xFFFF) + 1) & 0xFFFF;
|
|
411
|
+
for (int Hmtef = 0; Hmtef < 3; Hmtef++)
|
|
412
|
+
{
|
|
413
|
+
for (int CEwoz = 0; CEwoz < 2; CEwoz++)
|
|
414
|
+
{
|
|
415
|
+
TSGdn = (TSGdn ^ (((TSGdn & 0xFFFF) << 11) & 0xFFFF)) & 0xFFFF;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
for (int OomDf = 0; OomDf < 3; OomDf++)
|
|
420
|
+
{
|
|
421
|
+
for (int WCOqH = 0; WCOqH < 4; WCOqH++)
|
|
422
|
+
{
|
|
423
|
+
TSGdn = (((TSGdn & 0xFFFF) >> 1) | ((TSGdn & 0xFFFF) << 15)) & 0xFFFF;
|
|
424
|
+
}
|
|
425
|
+
for (int ikutC = 0; ikutC < 2; ikutC++)
|
|
426
|
+
{
|
|
427
|
+
for (int HJjpq = 0; HJjpq < 2; HJjpq++)
|
|
428
|
+
{
|
|
429
|
+
TSGdn = (TSGdn ^ 0x5539) & 0xFFFF;
|
|
430
|
+
}
|
|
431
|
+
for (int FKCPT = 0; FKCPT < 3; FKCPT++)
|
|
432
|
+
{
|
|
433
|
+
TSGdn = (TSGdn ^ 0xFFFF) & 0xFFFF;
|
|
434
|
+
TSGdn = ((TSGdn & 0xFFFF) + 0xC1C1) & 0xFFFF;
|
|
435
|
+
}
|
|
436
|
+
TSGdn = (TSGdn ^ (((TSGdn & 0xFFFF) << 10) & 0xFFFF)) & 0xFFFF;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
TSGdn = ((TSGdn & 0xFFFF) - ugcqt) & 0xFFFF;
|
|
440
|
+
TSGdn = ((TSGdn & 0xFFFF) + 1) & 0xFFFF;
|
|
441
|
+
TSGdn = ((TSGdn & 0xFFFF) + 0x6B27) & 0xFFFF;
|
|
442
|
+
for (int knhQm = 0; knhQm < 2; knhQm++)
|
|
443
|
+
{
|
|
444
|
+
for (int dxIem = 0; dxIem < 4; dxIem++)
|
|
445
|
+
{
|
|
446
|
+
for (int LvAum = 0; LvAum < 3; LvAum++)
|
|
447
|
+
{
|
|
448
|
+
TSGdn = (((TSGdn & 0xFFFF) >> 2) | ((TSGdn & 0xFFFF) << 14)) & 0xFFFF;
|
|
449
|
+
TSGdn = (((~(TSGdn & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
450
|
+
TSGdn = (((TSGdn & 0xFFFF) << (ugcqt % 16)) | ((TSGdn & 0xFFFF) >> (16 - (ugcqt % 16)))) & 0xFFFF;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
TSGdn = ((TSGdn & 0xFFFF) - 1) & 0xFFFF;
|
|
454
|
+
TSGdn = (TSGdn ^ ugcqt) & 0xFFFF;
|
|
455
|
+
}
|
|
456
|
+
TSGdn = (TSGdn ^ 0xEDF3) & 0xFFFF;
|
|
457
|
+
TSGdn = (((TSGdn & 0xFFFF) >> (ugcqt % 16)) | ((TSGdn & 0xFFFF) << (16 - (ugcqt % 16)))) & 0xFFFF;
|
|
458
|
+
TSGdn = (((~(TSGdn & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
459
|
+
for (int tJDYH = 0; tJDYH < 2; tJDYH++)
|
|
460
|
+
{
|
|
461
|
+
for (int jqFXP = 0; jqFXP < 4; jqFXP++)
|
|
462
|
+
{
|
|
463
|
+
TSGdn = (((TSGdn & 0xFFFF) >> (ugcqt % 16)) | ((TSGdn & 0xFFFF) << (16 - (ugcqt % 16)))) & 0xFFFF;
|
|
464
|
+
TSGdn = (((TSGdn & 0xFFFF) << 3) | ((TSGdn & 0xFFFF) >> 13)) & 0xFFFF;
|
|
465
|
+
TSGdn = ((TSGdn & 0xFFFF) - 0x4E43) & 0xFFFF;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
superSecretString = superSecretString.Substring(0, ugcqt) + (char)(TSGdn & 0xFFFF) + superSecretString.Substring(ugcqt + 1);
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
MessageBox.Show(superSecretString);
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Visual Basic .NET encryption (UNICODE example)
|
|
475
|
+
|
|
476
|
+
```vbnet
|
|
477
|
+
' encrypted with https://www.stringencrypt.com (v1.5.0) [Visual Basic .NET]
|
|
478
|
+
' vbSecret = "Option Strict On in VB.NET"
|
|
479
|
+
Dim HudbE() As Integer = { &H6606, &H39FF, &H14BC, &HFFD1, &HF714, &HF242, &H6EBC, &H2E90,
|
|
480
|
+
&H2E4B, &H8DF2, &H9DD0, &H85C4, &HC1C3, &H37DD, &HD0D9, &H1C50,
|
|
481
|
+
&H3716, &H372F, &H13AC, &HF731, &HF5EC, &HF172, &H6F64, &H2F1B,
|
|
482
|
+
&HEE8D, &HAE75 }
|
|
483
|
+
Dim vbSecret As String
|
|
484
|
+
Dim XidVf As Integer
|
|
485
|
+
Dim oqtRy As Integer
|
|
486
|
+
Dim SKjiG As Integer
|
|
487
|
+
Dim QhyUd As Integer
|
|
488
|
+
Dim YHFWS As Integer
|
|
489
|
+
Dim EVNCa As Integer
|
|
490
|
+
|
|
491
|
+
Dim eRLNZ As Integer
|
|
492
|
+
For eRLNZ = 0 To 25
|
|
493
|
+
XidVf = HudbE(eRLNZ)
|
|
494
|
+
XidVf = (XidVf Xor eRLNZ) And &HFFFF
|
|
495
|
+
XidVf = ((XidVf And &HFFFF) + 1) And &HFFFF
|
|
496
|
+
For oqtRy = 0 To 1
|
|
497
|
+
For SKjiG = 0 To 3
|
|
498
|
+
XidVf = ((XidVf And &HFFFF) - eRLNZ) And &HFFFF
|
|
499
|
+
Next
|
|
500
|
+
XidVf = ((XidVf And &HFFFF) - &HF6B4) And &HFFFF
|
|
501
|
+
Next
|
|
502
|
+
XidVf = ((XidVf And &HFFFF) + 1) And &HFFFF
|
|
503
|
+
XidVf = (((XidVf And &HFFFF) << (eRLNZ Mod 16)) Or ((XidVf And &HFFFF) >> (16 - (eRLNZ Mod 16)))) And &HFFFF
|
|
504
|
+
For QhyUd = 0 To 3
|
|
505
|
+
For YHFWS = 0 To 2
|
|
506
|
+
XidVf = ((XidVf And &HFFFF) - 1) And &HFFFF
|
|
507
|
+
Next
|
|
508
|
+
XidVf = ((XidVf And &HFFFF) - &H4A45) And &HFFFF
|
|
509
|
+
XidVf = (XidVf Xor eRLNZ) And &HFFFF
|
|
510
|
+
Next
|
|
511
|
+
XidVf = (((XidVf And &HFFFF) >> 8) Or ((XidVf And &HFFFF) << 8)) And &HFFFF
|
|
512
|
+
XidVf = (XidVf Xor (((XidVf And &HFFFF) << 15) And &HFFFF)) And &HFFFF
|
|
513
|
+
For EVNCa = 0 To 3
|
|
514
|
+
XidVf = (XidVf Xor eRLNZ) And &HFFFF
|
|
515
|
+
XidVf = (((XidVf And &HFFFF) >> 8) Or ((XidVf And &HFFFF) << 8)) And &HFFFF
|
|
516
|
+
Next
|
|
517
|
+
vbSecret = vbSecret + ChrW(XidVf And &HFFFF)
|
|
518
|
+
Next eRLNZ
|
|
519
|
+
|
|
520
|
+
MessageBox.Show(vbSecret)
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Delphi & Pascal encryption (UNICODE example)
|
|
524
|
+
|
|
525
|
+
```delphi
|
|
526
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Delphi / Pascal]
|
|
527
|
+
var
|
|
528
|
+
// mySecret = "Delphi is awesome!"
|
|
529
|
+
mySecret: array[0..19] of WideChar;
|
|
530
|
+
HFisk: Integer;
|
|
531
|
+
ZnzLM: Integer;
|
|
532
|
+
XMlUh: Integer;
|
|
533
|
+
pSdQr: Integer;
|
|
534
|
+
clrza: Integer;
|
|
535
|
+
GPvNR: Integer;
|
|
536
|
+
lFOKB: Integer;
|
|
537
|
+
|
|
538
|
+
begin
|
|
539
|
+
|
|
540
|
+
mySecret[6] := WideChar($EF77); mySecret[15] := WideChar($766A);
|
|
541
|
+
mySecret[5] := WideChar($4E77); mySecret[1] := WideChar($F277);
|
|
542
|
+
mySecret[2] := WideChar($3B77); mySecret[17] := WideChar($FE72);
|
|
543
|
+
mySecret[14] := WideChar($7268); mySecret[9] := WideChar($9362);
|
|
544
|
+
mySecret[0] := WideChar($EB77); mySecret[3] := WideChar($4B77);
|
|
545
|
+
mySecret[13] := WideChar($E06A); mySecret[16] := WideChar($0A75);
|
|
546
|
+
mySecret[11] := WideChar($5462); mySecret[4] := WideChar($AF74);
|
|
547
|
+
mySecret[7] := WideChar($2A77); mySecret[10] := WideChar($F060);
|
|
548
|
+
mySecret[8] := WideChar($FA64); mySecret[18] := WideChar($5F70);
|
|
549
|
+
mySecret[12] := WideChar($4464);
|
|
550
|
+
|
|
551
|
+
for lFOKB := 0 to 19 do
|
|
552
|
+
begin
|
|
553
|
+
HFisk := Ord(mySecret[lFOKB]);
|
|
554
|
+
HFisk := (HFisk xor $FFFF) and $FFFF;
|
|
555
|
+
HFisk := (HFisk xor lFOKB) and $FFFF;
|
|
556
|
+
HFisk := ((HFisk and $FFFF) - $0124) and $FFFF;
|
|
557
|
+
HFisk := ((HFisk and $FFFF) - lFOKB) and $FFFF;
|
|
558
|
+
HFisk := (((HFisk and $FFFF) shr 8) or ((HFisk and $FFFF) shl 8)) and $FFFF;
|
|
559
|
+
HFisk := (HFisk xor $168C) and $FFFF;
|
|
560
|
+
HFisk := (((HFisk and $FFFF) shr 8) or ((HFisk and $FFFF) shl 8)) and $FFFF;
|
|
561
|
+
HFisk := (((HFisk and $FFFF) xor $FFFF) + 1) and $FFFF;
|
|
562
|
+
HFisk := (((HFisk and $FFFF) shr 8) or ((HFisk and $FFFF) shl 8)) and $FFFF;
|
|
563
|
+
HFisk := (HFisk xor $FFFF) and $FFFF;
|
|
564
|
+
for ZnzLM := 0 to 3 do
|
|
565
|
+
begin
|
|
566
|
+
HFisk := ((HFisk and $FFFF) + lFOKB) and $FFFF;
|
|
567
|
+
for XMlUh := 0 to 2 do
|
|
568
|
+
begin
|
|
569
|
+
HFisk := (HFisk xor lFOKB) and $FFFF;
|
|
570
|
+
HFisk := ((HFisk and $FFFF) + lFOKB) and $FFFF;
|
|
571
|
+
HFisk := (HFisk xor ((HFisk and $FFFF) shr 10)) and $FFFF;
|
|
572
|
+
end;
|
|
573
|
+
end;
|
|
574
|
+
HFisk := (HFisk xor $71DB) and $FFFF;
|
|
575
|
+
HFisk := (HFisk xor ((HFisk and $FFFF) shr 8)) and $FFFF;
|
|
576
|
+
for pSdQr := 0 to 2 do
|
|
577
|
+
begin
|
|
578
|
+
for clrza := 0 to 2 do
|
|
579
|
+
begin
|
|
580
|
+
HFisk := ((HFisk and $FFFF) - lFOKB) and $FFFF;
|
|
581
|
+
end;
|
|
582
|
+
HFisk := (HFisk xor $FFFF) and $FFFF;
|
|
583
|
+
for GPvNR := 0 to 2 do
|
|
584
|
+
begin
|
|
585
|
+
HFisk := (HFisk xor lFOKB) and $FFFF;
|
|
586
|
+
HFisk := (HFisk xor $FFFF) and $FFFF;
|
|
587
|
+
end;
|
|
588
|
+
end;
|
|
589
|
+
mySecret[lFOKB] := WideChar(HFisk);
|
|
590
|
+
end;
|
|
591
|
+
|
|
592
|
+
ShowMessage(mySecret);
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
### Java encryption (UNICODE example)
|
|
596
|
+
|
|
597
|
+
```java
|
|
598
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Java]
|
|
599
|
+
// myJavaPassword = "Very secret password! QWERTY"
|
|
600
|
+
String myJavaPassword = "";
|
|
601
|
+
|
|
602
|
+
int LcnEg[] = { 0x8DEC, 0x1C11, 0x38B7, 0x7266, 0xE77C, 0xD369, 0xA92B, 0x6FC7,
|
|
603
|
+
0xF70E, 0x331E, 0xEC3C, 0xF379, 0x0CF7, 0x51F2, 0x9BEC, 0x47EA,
|
|
604
|
+
0x3008, 0xA052, 0x411F, 0x834F, 0x09B7, 0x16F6, 0x36CC, 0x7088,
|
|
605
|
+
0x1D71, 0x75E2, 0x6445, 0x9E8B };
|
|
606
|
+
|
|
607
|
+
for (int syzDT = 0, ZAfcE = 0; syzDT < 28; syzDT++)
|
|
608
|
+
{
|
|
609
|
+
ZAfcE = LcnEg[syzDT];
|
|
610
|
+
ZAfcE = (((ZAfcE & 0xFFFF) >>> 13) | ((ZAfcE & 0xFFFF) << 3)) & 0xFFFF;
|
|
611
|
+
ZAfcE = (((ZAfcE & 0xFFFF) >>> (syzDT % 16)) | ((ZAfcE & 0xFFFF) << (16 - (syzDT % 16)))) & 0xFFFF;
|
|
612
|
+
ZAfcE = (((~(ZAfcE & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
613
|
+
ZAfcE = (((ZAfcE & 0xFFFF) >>> 8) | ((ZAfcE & 0xFFFF) << 8)) & 0xFFFF;
|
|
614
|
+
for (int gyKZB = 0; gyKZB < 3; gyKZB++)
|
|
615
|
+
{
|
|
616
|
+
ZAfcE = ((ZAfcE & 0xFFFF) - 0xAE0D) & 0xFFFF;
|
|
617
|
+
}
|
|
618
|
+
ZAfcE = ((ZAfcE & 0xFFFF) + syzDT) & 0xFFFF;
|
|
619
|
+
for (int KnuGq = 0; KnuGq < 4; KnuGq++)
|
|
620
|
+
{
|
|
621
|
+
for (int kbnLT = 0; kbnLT < 4; kbnLT++)
|
|
622
|
+
{
|
|
623
|
+
ZAfcE = (((ZAfcE & 0xFFFF) >>> 8) | ((ZAfcE & 0xFFFF) << 8)) & 0xFFFF;
|
|
624
|
+
}
|
|
625
|
+
ZAfcE = (ZAfcE ^ syzDT) & 0xFFFF;
|
|
626
|
+
}
|
|
627
|
+
ZAfcE = (((ZAfcE & 0xFFFF) >>> 8) | ((ZAfcE & 0xFFFF) << 8)) & 0xFFFF;
|
|
628
|
+
for (int oVJfW = 0; oVJfW < 3; oVJfW++)
|
|
629
|
+
{
|
|
630
|
+
ZAfcE = (ZAfcE ^ 0xC49D) & 0xFFFF;
|
|
631
|
+
for (int LzJBK = 0; LzJBK < 2; LzJBK++)
|
|
632
|
+
{
|
|
633
|
+
ZAfcE = ((ZAfcE & 0xFFFF) - 1) & 0xFFFF;
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
for (int JKcZp = 0; JKcZp < 2; JKcZp++)
|
|
637
|
+
{
|
|
638
|
+
ZAfcE = (ZAfcE ^ syzDT) & 0xFFFF;
|
|
639
|
+
for (int kvRTO = 0; kvRTO < 2; kvRTO++)
|
|
640
|
+
{
|
|
641
|
+
for (int uFglb = 0; uFglb < 2; uFglb++)
|
|
642
|
+
{
|
|
643
|
+
ZAfcE = (((ZAfcE & 0xFFFF) << 7) | ((ZAfcE & 0xFFFF) >>> 9)) & 0xFFFF;
|
|
644
|
+
}
|
|
645
|
+
ZAfcE = (ZAfcE ^ 0xFFFF) & 0xFFFF;
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
ZAfcE = ((ZAfcE & 0xFFFF) + 0x4453) & 0xFFFF;
|
|
649
|
+
ZAfcE = (((ZAfcE & 0xFFFF) >>> 8) | ((ZAfcE & 0xFFFF) << 8)) & 0xFFFF;
|
|
650
|
+
myJavaPassword = myJavaPassword + (char)(ZAfcE & 0xFFFF);
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
System.out.println(myJavaPassword);
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
### Kotlin encryption (UNICODE example)
|
|
657
|
+
|
|
658
|
+
```kotlin
|
|
659
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Kotlin]
|
|
660
|
+
// kotlinSecret = "Kotlin on the JVM"
|
|
661
|
+
var kotlinSecret: String = ""
|
|
662
|
+
|
|
663
|
+
val MapNJ: IntArray = intArrayOf( 0x4B2E, 0x0223, 0xC7ED, 0x4032, 0x96E3, 0x7865, 0x23EB, 0x599C,
|
|
664
|
+
0xC383, 0x264E, 0x5F09, 0x7EFE, 0xA113, 0xA2A3, 0x00E5, 0x780D,
|
|
665
|
+
0x8E55 )
|
|
666
|
+
|
|
667
|
+
var Qtqma: Int = 0
|
|
668
|
+
for (LZjJi in 0 until 17)
|
|
669
|
+
{
|
|
670
|
+
Qtqma = MapNJ[LZjJi]
|
|
671
|
+
Qtqma = ((Qtqma and 0xFFFF) + 0xA521) and 0xFFFF
|
|
672
|
+
Qtqma = (Qtqma xor (((Qtqma and 0xFFFF) shl 10) and 0xFFFF)) and 0xFFFF
|
|
673
|
+
for (rZUBD in 0 until 4)
|
|
674
|
+
{
|
|
675
|
+
for (ZXqdA in 0 until 2)
|
|
676
|
+
{
|
|
677
|
+
Qtqma = (((Qtqma and 0xFFFF) shr (LZjJi % 16)) or ((Qtqma and 0xFFFF) shl (16 - (LZjJi % 16)))) and 0xFFFF
|
|
678
|
+
for (vxUnf in 0 until 4)
|
|
679
|
+
{
|
|
680
|
+
Qtqma = ((Qtqma and 0xFFFF) + 0x0CA9) and 0xFFFF
|
|
681
|
+
Qtqma = ((Qtqma and 0xFFFF) - 1) and 0xFFFF
|
|
682
|
+
Qtqma = (((Qtqma and 0xFFFF) xor 0xFFFF) + 1) and 0xFFFF
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
for (VawkG in 0 until 3)
|
|
686
|
+
{
|
|
687
|
+
Qtqma = ((Qtqma and 0xFFFF) - LZjJi) and 0xFFFF
|
|
688
|
+
Qtqma = ((Qtqma and 0xFFFF) + 0xC4AF) and 0xFFFF
|
|
689
|
+
for (JnHMU in 0 until 2)
|
|
690
|
+
{
|
|
691
|
+
Qtqma = (((Qtqma and 0xFFFF) shl 11) or ((Qtqma and 0xFFFF) shr 5)) and 0xFFFF
|
|
692
|
+
Qtqma = (((Qtqma and 0xFFFF) shl (LZjJi % 16)) or ((Qtqma and 0xFFFF) shr (16 - (LZjJi % 16)))) and 0xFFFF
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
Qtqma = (Qtqma xor 0x1E6F) and 0xFFFF
|
|
697
|
+
Qtqma = (Qtqma xor LZjJi) and 0xFFFF
|
|
698
|
+
Qtqma = (((Qtqma and 0xFFFF) shl (LZjJi % 16)) or ((Qtqma and 0xFFFF) shr (16 - (LZjJi % 16)))) and 0xFFFF
|
|
699
|
+
Qtqma = ((Qtqma and 0xFFFF) - 1) and 0xFFFF
|
|
700
|
+
for (DBMXv in 0 until 4)
|
|
701
|
+
{
|
|
702
|
+
Qtqma = (((Qtqma and 0xFFFF) shr (LZjJi % 16)) or ((Qtqma and 0xFFFF) shl (16 - (LZjJi % 16)))) and 0xFFFF
|
|
703
|
+
for (SvQUI in 0 until 3)
|
|
704
|
+
{
|
|
705
|
+
Qtqma = (Qtqma xor ((Qtqma and 0xFFFF) shr 10)) and 0xFFFF
|
|
706
|
+
}
|
|
707
|
+
Qtqma = ((Qtqma and 0xFFFF) - LZjJi) and 0xFFFF
|
|
708
|
+
}
|
|
709
|
+
for (wIdsO in 0 until 4)
|
|
710
|
+
{
|
|
711
|
+
for (bQekV in 0 until 3)
|
|
712
|
+
{
|
|
713
|
+
for (ybGvH in 0 until 2)
|
|
714
|
+
{
|
|
715
|
+
Qtqma = ((Qtqma and 0xFFFF) - 0xC2FD) and 0xFFFF
|
|
716
|
+
}
|
|
717
|
+
Qtqma = ((Qtqma and 0xFFFF) - 1) and 0xFFFF
|
|
718
|
+
}
|
|
719
|
+
for (FbYSu in 0 until 2)
|
|
720
|
+
{
|
|
721
|
+
Qtqma = (((Qtqma and 0xFFFF) shl 4) or ((Qtqma and 0xFFFF) shr 12)) and 0xFFFF
|
|
722
|
+
for (FlDtI in 0 until 4)
|
|
723
|
+
{
|
|
724
|
+
Qtqma = ((Qtqma and 0xFFFF) + 0xDAE9) and 0xFFFF
|
|
725
|
+
Qtqma = ((Qtqma and 0xFFFF) - 1) and 0xFFFF
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
for (MFZJI in 0 until 3)
|
|
729
|
+
{
|
|
730
|
+
Qtqma = (Qtqma xor 0x4B9F) and 0xFFFF
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
for (aIwem in 0 until 2)
|
|
734
|
+
{
|
|
735
|
+
Qtqma = ((Qtqma and 0xFFFF) - 1) and 0xFFFF
|
|
736
|
+
Qtqma = (Qtqma xor LZjJi) and 0xFFFF
|
|
737
|
+
Qtqma = ((Qtqma and 0xFFFF) - LZjJi) and 0xFFFF
|
|
738
|
+
}
|
|
739
|
+
for (zEwAM in 0 until 4)
|
|
740
|
+
{
|
|
741
|
+
Qtqma = (((Qtqma and 0xFFFF) shr 1) or ((Qtqma and 0xFFFF) shl 15)) and 0xFFFF
|
|
742
|
+
}
|
|
743
|
+
for (ygZUD in 0 until 2)
|
|
744
|
+
{
|
|
745
|
+
for (jgfsh in 0 until 2)
|
|
746
|
+
{
|
|
747
|
+
for (bwAuM in 0 until 3)
|
|
748
|
+
{
|
|
749
|
+
Qtqma = ((Qtqma and 0xFFFF) - LZjJi) and 0xFFFF
|
|
750
|
+
Qtqma = (Qtqma xor 0xA8C1) and 0xFFFF
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
for (SmKCk in 0 until 2)
|
|
755
|
+
{
|
|
756
|
+
Qtqma = ((Qtqma and 0xFFFF) - 0x2E59) and 0xFFFF
|
|
757
|
+
Qtqma = (((Qtqma and 0xFFFF) shr 8) or ((Qtqma and 0xFFFF) shl 8)) and 0xFFFF
|
|
758
|
+
for (nFtXV in 0 until 4)
|
|
759
|
+
{
|
|
760
|
+
Qtqma = ((Qtqma and 0xFFFF) + 0xB7F5) and 0xFFFF
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
for (lmKPC in 0 until 4)
|
|
764
|
+
{
|
|
765
|
+
for (xrXVo in 0 until 4)
|
|
766
|
+
{
|
|
767
|
+
Qtqma = (((Qtqma and 0xFFFF) shl (LZjJi % 16)) or ((Qtqma and 0xFFFF) shr (16 - (LZjJi % 16)))) and 0xFFFF
|
|
768
|
+
}
|
|
769
|
+
for (eFaSv in 0 until 2)
|
|
770
|
+
{
|
|
771
|
+
for (zauAC in 0 until 4)
|
|
772
|
+
{
|
|
773
|
+
Qtqma = (((Qtqma and 0xFFFF) xor 0xFFFF) + 1) and 0xFFFF
|
|
774
|
+
}
|
|
775
|
+
for (HOFwY in 0 until 3)
|
|
776
|
+
{
|
|
777
|
+
Qtqma = (Qtqma xor ((Qtqma and 0xFFFF) shr 15)) and 0xFFFF
|
|
778
|
+
Qtqma = (Qtqma xor 0x249B) and 0xFFFF
|
|
779
|
+
Qtqma = (((Qtqma and 0xFFFF) shr 8) or ((Qtqma and 0xFFFF) shl 8)) and 0xFFFF
|
|
780
|
+
}
|
|
781
|
+
Qtqma = (((Qtqma and 0xFFFF) shr (LZjJi % 16)) or ((Qtqma and 0xFFFF) shl (16 - (LZjJi % 16)))) and 0xFFFF
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
for (Kheuf in 0 until 3)
|
|
785
|
+
{
|
|
786
|
+
Qtqma = (Qtqma xor LZjJi) and 0xFFFF
|
|
787
|
+
for (cZgxP in 0 until 2)
|
|
788
|
+
{
|
|
789
|
+
Qtqma = (Qtqma xor ((Qtqma and 0xFFFF) shr 12)) and 0xFFFF
|
|
790
|
+
Qtqma = ((Qtqma and 0xFFFF) - LZjJi) and 0xFFFF
|
|
791
|
+
}
|
|
792
|
+
for (UDeIb in 0 until 2)
|
|
793
|
+
{
|
|
794
|
+
Qtqma = (((Qtqma and 0xFFFF) shr (LZjJi % 16)) or ((Qtqma and 0xFFFF) shl (16 - (LZjJi % 16)))) and 0xFFFF
|
|
795
|
+
Qtqma = (Qtqma xor LZjJi) and 0xFFFF
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
kotlinSecret += (Qtqma and 0xFFFF).toChar()
|
|
799
|
+
}
|
|
800
|
+
|
|
801
|
+
println(kotlinSecret)
|
|
802
|
+
```
|
|
803
|
+
|
|
804
|
+
### JavaScript encryption (ANSI)
|
|
805
|
+
|
|
806
|
+
```js
|
|
807
|
+
<script type="text/javascript">
|
|
808
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [JavaScript]
|
|
809
|
+
// hiddenJavaScriptString = "How to encrypt string in JavaScript? That\'s how!"
|
|
810
|
+
var hiddenJavaScriptString;
|
|
811
|
+
|
|
812
|
+
hiddenJavaScriptString = String.fromCharCode(0x16, 0x1A, 0x4B, 0x5F, 0xA2, 0xB5, 0x72, 0xB7,
|
|
813
|
+
0x13, 0x17, 0x51, 0x45, 0x31, 0x5B, 0x66, 0xD6,
|
|
814
|
+
0x78, 0x00, 0xEF, 0x0A, 0xAF, 0x64, 0x35, 0x78,
|
|
815
|
+
0x93, 0xC7, 0x2F, 0x20, 0x26, 0xAA, 0x8C, 0x84,
|
|
816
|
+
0x18, 0xF5, 0x49, 0x38, 0x14, 0xB3, 0x1C, 0x20,
|
|
817
|
+
0x34, 0x81, 0x8A, 0x6B, 0x13, 0xC7, 0x56, 0x81);
|
|
818
|
+
|
|
819
|
+
for (var bSfCi = 0, egLpQ = 0; bSfCi < 48; bSfCi++)
|
|
820
|
+
{
|
|
821
|
+
egLpQ = hiddenJavaScriptString.charCodeAt(bSfCi);
|
|
822
|
+
for (var aQdCH = 0; aQdCH < 3; aQdCH++)
|
|
823
|
+
{
|
|
824
|
+
egLpQ = (((egLpQ & 0xFF) >>> 4) | ((egLpQ & 0xFF) << 4)) & 0xFF;
|
|
825
|
+
}
|
|
826
|
+
egLpQ = (egLpQ ^ ((egLpQ & 0xFF) >>> 4)) & 0xFF;
|
|
827
|
+
for (var EbHLk = 0; EbHLk < 2; EbHLk++)
|
|
828
|
+
{
|
|
829
|
+
egLpQ = ((egLpQ & 0xFF) + 1) & 0xFF;
|
|
830
|
+
egLpQ = (egLpQ ^ bSfCi) & 0xFF;
|
|
831
|
+
}
|
|
832
|
+
for (var jxAbD = 0; jxAbD < 4; jxAbD++)
|
|
833
|
+
{
|
|
834
|
+
for (var bZsUm = 0; bZsUm < 3; bZsUm++)
|
|
835
|
+
{
|
|
836
|
+
egLpQ = (egLpQ ^ (((egLpQ & 0xFF) << 5) & 0xFF)) & 0xFF;
|
|
837
|
+
}
|
|
838
|
+
for (var gHYeD = 0; gHYeD < 4; gHYeD++)
|
|
839
|
+
{
|
|
840
|
+
egLpQ = ((egLpQ & 0xFF) + 0x93) & 0xFF;
|
|
841
|
+
egLpQ = ((egLpQ & 0xFF) - bSfCi) & 0xFF;
|
|
842
|
+
for (var coFQk = 0; coFQk < 2; coFQk++)
|
|
843
|
+
{
|
|
844
|
+
egLpQ = (((egLpQ & 0xFF) >>> (bSfCi % 8)) | ((egLpQ & 0xFF) << (8 - (bSfCi % 8)))) & 0xFF;
|
|
845
|
+
egLpQ = ((egLpQ & 0xFF) + 0xB2) & 0xFF;
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
for (var TwAVr = 0; TwAVr < 2; TwAVr++)
|
|
850
|
+
{
|
|
851
|
+
for (var usPxq = 0; usPxq < 4; usPxq++)
|
|
852
|
+
{
|
|
853
|
+
egLpQ = ((egLpQ & 0xFF) - bSfCi) & 0xFF;
|
|
854
|
+
egLpQ = (((~(egLpQ & 0xFF)) & 0xFF) + 1) & 0xFF;
|
|
855
|
+
egLpQ = (egLpQ ^ 0x6A) & 0xFF;
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
egLpQ = (((egLpQ & 0xFF) << (bSfCi % 8)) | ((egLpQ & 0xFF) >>> (8 - (bSfCi % 8)))) & 0xFF;
|
|
859
|
+
egLpQ = (egLpQ ^ (((egLpQ & 0xFF) << 6) & 0xFF)) & 0xFF;
|
|
860
|
+
egLpQ = ((egLpQ & 0xFF) - 0x01) & 0xFF;
|
|
861
|
+
egLpQ = (((egLpQ & 0xFF) >>> (bSfCi % 8)) | ((egLpQ & 0xFF) << (8 - (bSfCi % 8)))) & 0xFF;
|
|
862
|
+
for (var CXibH = 0; CXibH < 3; CXibH++)
|
|
863
|
+
{
|
|
864
|
+
for (var vHdOC = 0; vHdOC < 4; vHdOC++)
|
|
865
|
+
{
|
|
866
|
+
egLpQ = ((egLpQ & 0xFF) + 0x20) & 0xFF;
|
|
867
|
+
}
|
|
868
|
+
for (var yvjew = 0; yvjew < 2; yvjew++)
|
|
869
|
+
{
|
|
870
|
+
for (var onYQB = 0; onYQB < 4; onYQB++)
|
|
871
|
+
{
|
|
872
|
+
egLpQ = (egLpQ ^ bSfCi) & 0xFF;
|
|
873
|
+
}
|
|
874
|
+
egLpQ = (((egLpQ & 0xFF) >>> 4) | ((egLpQ & 0xFF) << 4)) & 0xFF;
|
|
875
|
+
egLpQ = (((egLpQ & 0xFF) << (bSfCi % 8)) | ((egLpQ & 0xFF) >>> (8 - (bSfCi % 8)))) & 0xFF;
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
for (var KqaIN = 0; KqaIN < 3; KqaIN++)
|
|
879
|
+
{
|
|
880
|
+
egLpQ = ((egLpQ & 0xFF) - 1) & 0xFF;
|
|
881
|
+
egLpQ = (((egLpQ & 0xFF) >>> 4) | ((egLpQ & 0xFF) << 4)) & 0xFF;
|
|
882
|
+
for (var uiNqF = 0; uiNqF < 2; uiNqF++)
|
|
883
|
+
{
|
|
884
|
+
egLpQ = (egLpQ ^ (((egLpQ & 0xFF) << 5) & 0xFF)) & 0xFF;
|
|
885
|
+
for (var kGYAO = 0; kGYAO < 4; kGYAO++)
|
|
886
|
+
{
|
|
887
|
+
egLpQ = (((egLpQ & 0xFF) >>> (bSfCi % 8)) | ((egLpQ & 0xFF) << (8 - (bSfCi % 8)))) & 0xFF;
|
|
888
|
+
egLpQ = ((egLpQ & 0xFF) - 1) & 0xFF;
|
|
889
|
+
egLpQ = (egLpQ ^ 0x1B) & 0xFF;
|
|
890
|
+
}
|
|
891
|
+
for (var oCMrO = 0; oCMrO < 2; oCMrO++)
|
|
892
|
+
{
|
|
893
|
+
egLpQ = (egLpQ ^ (((egLpQ & 0xFF) << 6) & 0xFF)) & 0xFF;
|
|
894
|
+
egLpQ = ((egLpQ & 0xFF) + 1) & 0xFF;
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
egLpQ = (((egLpQ & 0xFF) << 6) | ((egLpQ & 0xFF) >>> 2)) & 0xFF;
|
|
899
|
+
for (var kincR = 0; kincR < 2; kincR++)
|
|
900
|
+
{
|
|
901
|
+
egLpQ = ((egLpQ & 0xFF) + 0x0F) & 0xFF;
|
|
902
|
+
egLpQ = ((egLpQ & 0xFF) + bSfCi) & 0xFF;
|
|
903
|
+
egLpQ = (egLpQ ^ ((egLpQ & 0xFF) >>> 5)) & 0xFF;
|
|
904
|
+
}
|
|
905
|
+
for (var ExphN = 0; ExphN < 3; ExphN++)
|
|
906
|
+
{
|
|
907
|
+
egLpQ = (egLpQ ^ (((egLpQ & 0xFF) << 7) & 0xFF)) & 0xFF;
|
|
908
|
+
egLpQ = (((egLpQ & 0xFF) >>> 4) | ((egLpQ & 0xFF) << 4)) & 0xFF;
|
|
909
|
+
egLpQ = ((egLpQ & 0xFF) - 1) & 0xFF;
|
|
910
|
+
}
|
|
911
|
+
hiddenJavaScriptString = hiddenJavaScriptString.substr(0, bSfCi) + String.fromCharCode(egLpQ & 0xFF) + hiddenJavaScriptString.substr(bSfCi + 1);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
alert(hiddenJavaScriptString);
|
|
915
|
+
</script>
|
|
916
|
+
```
|
|
917
|
+
|
|
918
|
+
### Ruby encryption (UNICODE example)
|
|
919
|
+
|
|
920
|
+
```ruby
|
|
921
|
+
# encrypted with https://www.stringencrypt.com (v1.5.0) [Ruby]
|
|
922
|
+
# ruby = "Ruby on rails"
|
|
923
|
+
ruby = [ 0x441E, 0x69DE, 0xE834, 0x7022, 0x2CEA, 0x5753, 0x7FCC, 0x4F84,
|
|
924
|
+
0x6E7B, 0xC534, 0x8EF9, 0xA4E7, 0xD30C ]
|
|
925
|
+
|
|
926
|
+
ruby.each_with_index do |qawdj, vdyrt|
|
|
927
|
+
4.times do
|
|
928
|
+
qawdj = ((qawdj & 0xFFFF) - vdyrt) & 0xFFFF
|
|
929
|
+
qawdj = ((qawdj & 0xFFFF) + 0xD208) & 0xFFFF
|
|
930
|
+
qawdj = (((qawdj & 0xFFFF) >> 3) | ((qawdj & 0xFFFF) << 13)) & 0xFFFF
|
|
931
|
+
end
|
|
932
|
+
qawdj = (((qawdj & 0xFFFF) >> 8) | ((qawdj & 0xFFFF) << 8)) & 0xFFFF
|
|
933
|
+
qawdj = (((qawdj & 0xFFFF) >> 8) | ((qawdj & 0xFFFF) << 8)) & 0xFFFF
|
|
934
|
+
3.times do
|
|
935
|
+
qawdj = ((qawdj & 0xFFFF) + 0x1812) & 0xFFFF
|
|
936
|
+
qawdj = (((qawdj & 0xFFFF) << 12) | ((qawdj & 0xFFFF) >> 4)) & 0xFFFF
|
|
937
|
+
end
|
|
938
|
+
qawdj = (((qawdj & 0xFFFF) >> (vdyrt % 16)) | ((qawdj & 0xFFFF) << (16 - (vdyrt % 16)))) & 0xFFFF
|
|
939
|
+
qawdj = ((qawdj & 0xFFFF) + vdyrt) & 0xFFFF
|
|
940
|
+
qawdj = (((~(qawdj & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF
|
|
941
|
+
qawdj = (((qawdj & 0xFFFF) << 7) | ((qawdj & 0xFFFF) >> 9)) & 0xFFFF
|
|
942
|
+
qawdj = (qawdj ^ 0xF8E7) & 0xFFFF
|
|
943
|
+
qawdj = (((qawdj & 0xFFFF) >> (vdyrt % 16)) | ((qawdj & 0xFFFF) << (16 - (vdyrt % 16)))) & 0xFFFF
|
|
944
|
+
3.times do
|
|
945
|
+
qawdj = (((qawdj & 0xFFFF) >> 8) | ((qawdj & 0xFFFF) << 8)) & 0xFFFF
|
|
946
|
+
qawdj = ((qawdj & 0xFFFF) + 0x2B01) & 0xFFFF
|
|
947
|
+
end
|
|
948
|
+
2.times do
|
|
949
|
+
4.times do
|
|
950
|
+
3.times do
|
|
951
|
+
qawdj = (qawdj ^ (((qawdj & 0xFFFF) << 15) & 0xFFFF)) & 0xFFFF
|
|
952
|
+
end
|
|
953
|
+
end
|
|
954
|
+
2.times do
|
|
955
|
+
qawdj = (((qawdj & 0xFFFF) >> 15) | ((qawdj & 0xFFFF) << 1)) & 0xFFFF
|
|
956
|
+
4.times do
|
|
957
|
+
qawdj = (qawdj ^ ((qawdj & 0xFFFF) >> 8)) & 0xFFFF
|
|
958
|
+
end
|
|
959
|
+
qawdj = (qawdj ^ (((qawdj & 0xFFFF) << 8) & 0xFFFF)) & 0xFFFF
|
|
960
|
+
end
|
|
961
|
+
end
|
|
962
|
+
3.times do
|
|
963
|
+
2.times do
|
|
964
|
+
qawdj = ((qawdj & 0xFFFF) + 0xA961) & 0xFFFF
|
|
965
|
+
4.times do
|
|
966
|
+
qawdj = (qawdj ^ ((qawdj & 0xFFFF) >> 12)) & 0xFFFF
|
|
967
|
+
qawdj = (((qawdj & 0xFFFF) >> 8) | ((qawdj & 0xFFFF) << 8)) & 0xFFFF
|
|
968
|
+
end
|
|
969
|
+
qawdj = ((qawdj & 0xFFFF) + 0x95E6) & 0xFFFF
|
|
970
|
+
end
|
|
971
|
+
qawdj = (qawdj ^ 0xFFFF) & 0xFFFF
|
|
972
|
+
end
|
|
973
|
+
qawdj = (((qawdj & 0xFFFF) << 11) | ((qawdj & 0xFFFF) >> 5)) & 0xFFFF
|
|
974
|
+
4.times do
|
|
975
|
+
2.times do
|
|
976
|
+
qawdj = (((qawdj & 0xFFFF) << (vdyrt % 16)) | ((qawdj & 0xFFFF) >> (16 - (vdyrt % 16)))) & 0xFFFF
|
|
977
|
+
4.times do
|
|
978
|
+
qawdj = ((qawdj & 0xFFFF) - 1) & 0xFFFF
|
|
979
|
+
end
|
|
980
|
+
end
|
|
981
|
+
qawdj = ((qawdj & 0xFFFF) + 1) & 0xFFFF
|
|
982
|
+
end
|
|
983
|
+
ruby[vdyrt] = qawdj & 0xFFFF
|
|
984
|
+
end
|
|
985
|
+
ruby = ruby.pack('v*').force_encoding('UTF-16LE').encode('UTF-8')
|
|
986
|
+
|
|
987
|
+
puts ruby
|
|
988
|
+
```
|
|
989
|
+
|
|
990
|
+
### Python encryption (UNICODE example)
|
|
991
|
+
|
|
992
|
+
## Plain text Python string encryption
|
|
993
|
+
```python
|
|
994
|
+
cute_wabbit = "A little girl goes into a pet show and asks for a wabbit... http..."
|
|
995
|
+
```
|
|
996
|
+
|
|
997
|
+
to:
|
|
998
|
+
|
|
999
|
+
```python
|
|
1000
|
+
# encrypted with https://www.stringencrypt.com (v1.5.0) [Python]
|
|
1001
|
+
# -*- coding: utf-8 -*-
|
|
1002
|
+
# cute_wabbit = "A little girl goes into a pet show and asks for a wabbit... http..."
|
|
1003
|
+
cute_wabbit = [0xAC75, 0xD6D1, 0xC0F3, 0xCE7E, 0xE4E9, 0x5E85, 0x6E48, 0xB038,
|
|
1004
|
+
0x9325, 0xD141, 0x2CAE, 0x2680, 0x7E27, 0x6E40, 0x8CDF, 0x9840,
|
|
1005
|
+
0xBCB0, 0x75A0, 0xAD1A, 0x09AC, 0x9D01, 0x35D2, 0xD712, 0x6F69,
|
|
1006
|
+
0xA53D, 0x75B8, 0xAE25, 0x266F, 0xEA84, 0xCA81, 0x6855, 0x6BB6,
|
|
1007
|
+
0x9BE8, 0xC002, 0xA622, 0x709E, 0x9732, 0x48F4, 0x3E73, 0x6AD4,
|
|
1008
|
+
0x135C, 0xD181, 0x65E9, 0x220A, 0xFE25, 0x9F0D, 0x82B1, 0x0C97,
|
|
1009
|
+
0x4567, 0xAF11, 0xDC07, 0x98E6, 0x3202, 0x5B80, 0x923C, 0xE3A9,
|
|
1010
|
+
0x9EF2, 0xF11A, 0xEFA1, 0x70EB, 0x5BCF, 0xC56D, 0x1D7B, 0x638C,
|
|
1011
|
+
0xE11D, 0x9BD2, 0x513F]
|
|
1012
|
+
|
|
1013
|
+
for qoPms in range(67):
|
|
1014
|
+
jmsGR = cute_wabbit[qoPms]
|
|
1015
|
+
jmsGR = ((jmsGR & 0xFFFF) + 0x97C3) & 0xFFFF
|
|
1016
|
+
jmsGR = (jmsGR ^ ((jmsGR & 0xFFFF) >> 13)) & 0xFFFF
|
|
1017
|
+
for znegy in range(2):
|
|
1018
|
+
jmsGR = (((jmsGR & 0xFFFF) >> (qoPms % 16)) | ((jmsGR & 0xFFFF) << (16 - (qoPms % 16)))) & 0xFFFF
|
|
1019
|
+
for dwJcX in range(3):
|
|
1020
|
+
jmsGR = ((jmsGR & 0xFFFF) + 1) & 0xFFFF
|
|
1021
|
+
jmsGR = (jmsGR ^ 0xFFFF) & 0xFFFF
|
|
1022
|
+
for QpYFt in range(4):
|
|
1023
|
+
jmsGR = (((jmsGR & 0xFFFF) >> (qoPms % 16)) | ((jmsGR & 0xFFFF) << (16 - (qoPms % 16)))) & 0xFFFF
|
|
1024
|
+
jmsGR = (jmsGR ^ 0x6701) & 0xFFFF
|
|
1025
|
+
jmsGR = (((jmsGR & 0xFFFF) >> 5) | ((jmsGR & 0xFFFF) << 11)) & 0xFFFF
|
|
1026
|
+
for TUYrh in range(4):
|
|
1027
|
+
jmsGR = (((jmsGR & 0xFFFF) << (qoPms % 16)) | ((jmsGR & 0xFFFF) >> (16 - (qoPms % 16)))) & 0xFFFF
|
|
1028
|
+
for HdbmR in range(4):
|
|
1029
|
+
jmsGR = ((jmsGR & 0xFFFF) - 1) & 0xFFFF
|
|
1030
|
+
for lrOZq in range(4):
|
|
1031
|
+
jmsGR = (((~(jmsGR & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF
|
|
1032
|
+
for VqmkO in range(2):
|
|
1033
|
+
for ZIsub in range(4):
|
|
1034
|
+
jmsGR = ((jmsGR & 0xFFFF) + 1) & 0xFFFF
|
|
1035
|
+
jmsGR = (((jmsGR & 0xFFFF) << (qoPms % 16)) | ((jmsGR & 0xFFFF) >> (16 - (qoPms % 16)))) & 0xFFFF
|
|
1036
|
+
for XznKW in range(4):
|
|
1037
|
+
jmsGR = (jmsGR ^ qoPms) & 0xFFFF
|
|
1038
|
+
jmsGR = (((jmsGR & 0xFFFF) >> 8) | ((jmsGR & 0xFFFF) << 8)) & 0xFFFF
|
|
1039
|
+
jmsGR = ((jmsGR & 0xFFFF) - 1) & 0xFFFF
|
|
1040
|
+
for AflZi in range(2):
|
|
1041
|
+
for XJsoA in range(4):
|
|
1042
|
+
for bfcXt in range(2):
|
|
1043
|
+
jmsGR = ((jmsGR & 0xFFFF) + qoPms) & 0xFFFF
|
|
1044
|
+
jmsGR = (jmsGR ^ 0x5166) & 0xFFFF
|
|
1045
|
+
jmsGR = ((jmsGR & 0xFFFF) - 1) & 0xFFFF
|
|
1046
|
+
jmsGR = (((jmsGR & 0xFFFF) << 12) | ((jmsGR & 0xFFFF) >> 4)) & 0xFFFF
|
|
1047
|
+
jmsGR = (jmsGR ^ 0x0D9D) & 0xFFFF
|
|
1048
|
+
for iaOnJ in range(3):
|
|
1049
|
+
jmsGR = ((jmsGR & 0xFFFF) + 1) & 0xFFFF
|
|
1050
|
+
jmsGR = (((jmsGR & 0xFFFF) << 9) | ((jmsGR & 0xFFFF) >> 7)) & 0xFFFF
|
|
1051
|
+
for bdijX in range(4):
|
|
1052
|
+
jmsGR = ((jmsGR & 0xFFFF) + 1) & 0xFFFF
|
|
1053
|
+
for QRKMA in range(3):
|
|
1054
|
+
for yOQqG in range(3):
|
|
1055
|
+
jmsGR = (jmsGR ^ qoPms) & 0xFFFF
|
|
1056
|
+
for Rvjzn in range(2):
|
|
1057
|
+
jmsGR = ((jmsGR & 0xFFFF) + 1) & 0xFFFF
|
|
1058
|
+
jmsGR = ((jmsGR & 0xFFFF) + qoPms) & 0xFFFF
|
|
1059
|
+
jmsGR = ((jmsGR & 0xFFFF) - 0xF65D) & 0xFFFF
|
|
1060
|
+
jmsGR = ((jmsGR & 0xFFFF) - 1) & 0xFFFF
|
|
1061
|
+
for euRAN in range(2):
|
|
1062
|
+
jmsGR = (jmsGR ^ 0xFFFF) & 0xFFFF
|
|
1063
|
+
jmsGR = (((jmsGR & 0xFFFF) << 8) | ((jmsGR & 0xFFFF) >> 8)) & 0xFFFF
|
|
1064
|
+
jmsGR = (jmsGR ^ ((jmsGR & 0xFFFF) >> 11)) & 0xFFFF
|
|
1065
|
+
for woETk in range(3):
|
|
1066
|
+
for YJSUn in range(4):
|
|
1067
|
+
jmsGR = ((jmsGR & 0xFFFF) + 1) & 0xFFFF
|
|
1068
|
+
cute_wabbit[qoPms] = jmsGR
|
|
1069
|
+
|
|
1070
|
+
cute_wabbit = ''.join(chr(jmsGR & 0xFFFF) for jmsGR in cute_wabbit)
|
|
1071
|
+
|
|
1072
|
+
del qoPms, jmsGR
|
|
1073
|
+
|
|
1074
|
+
print(cute_wabbit)
|
|
1075
|
+
```
|
|
1076
|
+
|
|
1077
|
+
|
|
1078
|
+
### Dart encryption (UNICODE example)
|
|
1079
|
+
|
|
1080
|
+
```dart
|
|
1081
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Dart]
|
|
1082
|
+
// dartSecret = "Dart null-safe strings"
|
|
1083
|
+
String dartSecret = '\u{8BBE}\u{07F5}\u{900D}\u{47C5}\u{6C7D}\u{3986}\u{801A}\u{B154}' +
|
|
1084
|
+
'\u{A013}\u{33CF}\u{5586}\u{B661}\u{329E}\u{343A}\u{AC1D}\u{9752}' +
|
|
1085
|
+
'\u{F397}\u{36CA}\u{258B}\u{4C90}\u{6759}\u{4238}';
|
|
1086
|
+
|
|
1087
|
+
for (int eHdaK = 0, xNhfY = 0; eHdaK < 22; eHdaK++)
|
|
1088
|
+
{
|
|
1089
|
+
xNhfY = (dartSecret.codeUnitAt(eHdaK));
|
|
1090
|
+
for (int UkmTW = 0; UkmTW < 3; UkmTW++)
|
|
1091
|
+
{
|
|
1092
|
+
xNhfY = ((xNhfY & 0xFFFF) + eHdaK) & 0xFFFF;
|
|
1093
|
+
xNhfY = ((xNhfY & 0xFFFF) + 1) & 0xFFFF;
|
|
1094
|
+
}
|
|
1095
|
+
for (int xTQZL = 0; xTQZL < 2; xTQZL++)
|
|
1096
|
+
{
|
|
1097
|
+
xNhfY = (((xNhfY & 0xFFFF) >> (eHdaK % 16)) | ((xNhfY & 0xFFFF) << (16 - (eHdaK % 16)))) & 0xFFFF;
|
|
1098
|
+
xNhfY = ((xNhfY & 0xFFFF) + 0x6486) & 0xFFFF;
|
|
1099
|
+
}
|
|
1100
|
+
for (int TnAxM = 0; TnAxM < 4; TnAxM++)
|
|
1101
|
+
{
|
|
1102
|
+
for (int rnkwZ = 0; rnkwZ < 2; rnkwZ++)
|
|
1103
|
+
{
|
|
1104
|
+
xNhfY = (((xNhfY & 0xFFFF) >> (eHdaK % 16)) | ((xNhfY & 0xFFFF) << (16 - (eHdaK % 16)))) & 0xFFFF;
|
|
1105
|
+
xNhfY = ((xNhfY & 0xFFFF) - eHdaK) & 0xFFFF;
|
|
1106
|
+
}
|
|
1107
|
+
for (int fxhZW = 0; fxhZW < 4; fxhZW++)
|
|
1108
|
+
{
|
|
1109
|
+
xNhfY = (xNhfY ^ 0x92F4) & 0xFFFF;
|
|
1110
|
+
}
|
|
1111
|
+
xNhfY = ((xNhfY & 0xFFFF) - 1) & 0xFFFF;
|
|
1112
|
+
}
|
|
1113
|
+
xNhfY = (xNhfY ^ ((xNhfY & 0xFFFF) >> 10)) & 0xFFFF;
|
|
1114
|
+
for (int nozUF = 0; nozUF < 3; nozUF++)
|
|
1115
|
+
{
|
|
1116
|
+
xNhfY = (((xNhfY & 0xFFFF) << (eHdaK % 16)) | ((xNhfY & 0xFFFF) >> (16 - (eHdaK % 16)))) & 0xFFFF;
|
|
1117
|
+
}
|
|
1118
|
+
xNhfY = (xNhfY ^ 0x7948) & 0xFFFF;
|
|
1119
|
+
for (int gROwa = 0; gROwa < 3; gROwa++)
|
|
1120
|
+
{
|
|
1121
|
+
xNhfY = (((~(xNhfY & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
1122
|
+
for (int GyLBD = 0; GyLBD < 4; GyLBD++)
|
|
1123
|
+
{
|
|
1124
|
+
for (int xnTDg = 0; xnTDg < 4; xnTDg++)
|
|
1125
|
+
{
|
|
1126
|
+
xNhfY = ((xNhfY & 0xFFFF) + eHdaK) & 0xFFFF;
|
|
1127
|
+
}
|
|
1128
|
+
for (int czReq = 0; czReq < 3; czReq++)
|
|
1129
|
+
{
|
|
1130
|
+
xNhfY = (((~(xNhfY & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
1131
|
+
xNhfY = (((xNhfY & 0xFFFF) >> 8) | ((xNhfY & 0xFFFF) << 8)) & 0xFFFF;
|
|
1132
|
+
xNhfY = (((~(xNhfY & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
1133
|
+
}
|
|
1134
|
+
xNhfY = (((xNhfY & 0xFFFF) >> 7) | ((xNhfY & 0xFFFF) << 9)) & 0xFFFF;
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
xNhfY = (xNhfY ^ 0x1B95) & 0xFFFF;
|
|
1138
|
+
xNhfY = (xNhfY ^ ((xNhfY & 0xFFFF) >> 10)) & 0xFFFF;
|
|
1139
|
+
for (int JtOdF = 0; JtOdF < 4; JtOdF++)
|
|
1140
|
+
{
|
|
1141
|
+
for (int VYzxK = 0; VYzxK < 4; VYzxK++)
|
|
1142
|
+
{
|
|
1143
|
+
for (int gnUAS = 0; gnUAS < 2; gnUAS++)
|
|
1144
|
+
{
|
|
1145
|
+
xNhfY = ((xNhfY & 0xFFFF) + 0xF25D) & 0xFFFF;
|
|
1146
|
+
xNhfY = (((xNhfY & 0xFFFF) << 5) | ((xNhfY & 0xFFFF) >> 11)) & 0xFFFF;
|
|
1147
|
+
xNhfY = ((xNhfY & 0xFFFF) + eHdaK) & 0xFFFF;
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
for (int NFGjY = 0; NFGjY < 2; NFGjY++)
|
|
1151
|
+
{
|
|
1152
|
+
xNhfY = (xNhfY ^ 0xFFFF) & 0xFFFF;
|
|
1153
|
+
for (int mZcBl = 0; mZcBl < 4; mZcBl++)
|
|
1154
|
+
{
|
|
1155
|
+
xNhfY = ((xNhfY & 0xFFFF) + eHdaK) & 0xFFFF;
|
|
1156
|
+
xNhfY = (xNhfY ^ (((xNhfY & 0xFFFF) << 10) & 0xFFFF)) & 0xFFFF;
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
xNhfY = (((xNhfY & 0xFFFF) >> (eHdaK % 16)) | ((xNhfY & 0xFFFF) << (16 - (eHdaK % 16)))) & 0xFFFF;
|
|
1161
|
+
xNhfY = (((~(xNhfY & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
1162
|
+
// TODO: immutable String; use StringBuffer or runes for production
|
|
1163
|
+
dartSecret = dartSecret.substring(0, eHdaK) + String.fromCharCode(xNhfY & 0xFFFF) + dartSecret.substring(eHdaK + 1);
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
print(dartSecret);
|
|
1167
|
+
```
|
|
1168
|
+
|
|
1169
|
+
### Go encryption (UNICODE example)
|
|
1170
|
+
|
|
1171
|
+
```go
|
|
1172
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Go]
|
|
1173
|
+
|
|
1174
|
+
import (
|
|
1175
|
+
"fmt"
|
|
1176
|
+
"unicode/utf16"
|
|
1177
|
+
)
|
|
1178
|
+
// secretGo = "Go string encryption"
|
|
1179
|
+
var IdORV [21]uint16
|
|
1180
|
+
|
|
1181
|
+
IdORV[0] = 0x05BA IdORV[10] = 0xD7DB IdORV[12] = 0x9261 IdORV[7] = 0xF7B2
|
|
1182
|
+
IdORV[3] = 0x353D IdORV[15] = 0x8969 IdORV[20] = 0x4A86 IdORV[6] = 0x25C5
|
|
1183
|
+
IdORV[2] = 0xFB61 IdORV[18] = 0x97E2 IdORV[17] = 0xEBA7 IdORV[16] = 0xDD8D
|
|
1184
|
+
IdORV[19] = 0xE53D IdORV[11] = 0xF7E8 IdORV[13] = 0x2604 IdORV[4] = 0xC896
|
|
1185
|
+
IdORV[1] = 0x318A IdORV[5] = 0xE1D7 IdORV[9] = 0xBF59 IdORV[14] = 0x67B5
|
|
1186
|
+
IdORV[8] = 0x3978
|
|
1187
|
+
|
|
1188
|
+
var cbmGh uint16 = 0
|
|
1189
|
+
for ywkYl := 0; ywkYl < 21; ywkYl++ {
|
|
1190
|
+
cbmGh = uint16(IdORV[ywkYl])
|
|
1191
|
+
cbmGh = ((^(cbmGh & uint16(0xFFFF)) & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
|
|
1192
|
+
for KzBpw := 0; KzBpw < 4; KzBpw++ {
|
|
1193
|
+
for Vpmdv := 0; Vpmdv < 2; Vpmdv++ {
|
|
1194
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) << uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1195
|
+
for RvcuI := 0; RvcuI < 2; RvcuI++ {
|
|
1196
|
+
cbmGh = (cbmGh ^ uint16(0xEBA1)) & uint16(0xFFFF)
|
|
1197
|
+
cbmGh = ((^(cbmGh & uint16(0xFFFF)) & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
for mDHtT := 0; mDHtT < 3; mDHtT++ {
|
|
1202
|
+
cbmGh = (cbmGh ^ uint16(ywkYl)) & uint16(0xFFFF)
|
|
1203
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(0xBE3D)) & uint16(0xFFFF)
|
|
1204
|
+
}
|
|
1205
|
+
for OQUSg := 0; OQUSg < 3; OQUSg++ {
|
|
1206
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(ywkYl)) & uint16(0xFFFF)
|
|
1207
|
+
for EScqL := 0; EScqL < 2; EScqL++ {
|
|
1208
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> 4) | ((cbmGh & uint16(0xFFFF)) << 12)) & uint16(0xFFFF)
|
|
1209
|
+
}
|
|
1210
|
+
cbmGh = (cbmGh ^ uint16(0xFFFF)) & uint16(0xFFFF)
|
|
1211
|
+
}
|
|
1212
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) >> uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1213
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> 8) | ((cbmGh & uint16(0xFFFF)) << 8)) & uint16(0xFFFF)
|
|
1214
|
+
for FvKPx := 0; FvKPx < 2; FvKPx++ {
|
|
1215
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) << uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1216
|
+
for sPyek := 0; sPyek < 2; sPyek++ {
|
|
1217
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << 15) | ((cbmGh & uint16(0xFFFF)) >> 1)) & uint16(0xFFFF)
|
|
1218
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) << uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1219
|
+
}
|
|
1220
|
+
for gmqae := 0; gmqae < 4; gmqae++ {
|
|
1221
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(0x3DA6)) & uint16(0xFFFF)
|
|
1222
|
+
for SqVjo := 0; SqVjo < 3; SqVjo++ {
|
|
1223
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << 1) | ((cbmGh & uint16(0xFFFF)) >> 15)) & uint16(0xFFFF)
|
|
1224
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(1)) & uint16(0xFFFF)
|
|
1225
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << 8) | ((cbmGh & uint16(0xFFFF)) >> 8)) & uint16(0xFFFF)
|
|
1226
|
+
}
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
for zOIyq := 0; zOIyq < 2; zOIyq++ {
|
|
1230
|
+
cbmGh = (cbmGh ^ uint16(ywkYl)) & uint16(0xFFFF)
|
|
1231
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(ywkYl)) & uint16(0xFFFF)
|
|
1232
|
+
}
|
|
1233
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) >> uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1234
|
+
cbmGh = (cbmGh ^ ((cbmGh & uint16(0xFFFF)) >> 12)) & uint16(0xFFFF)
|
|
1235
|
+
for Jerya := 0; Jerya < 4; Jerya++ {
|
|
1236
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) << uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1237
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << 8) | ((cbmGh & uint16(0xFFFF)) >> 8)) & uint16(0xFFFF)
|
|
1238
|
+
for sFYvt := 0; sFYvt < 2; sFYvt++ {
|
|
1239
|
+
for Bpuqo := 0; Bpuqo < 4; Bpuqo++ {
|
|
1240
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) + uint16(0x63BE)) & uint16(0xFFFF)
|
|
1241
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(1)) & uint16(0xFFFF)
|
|
1242
|
+
}
|
|
1243
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) + uint16(ywkYl)) & uint16(0xFFFF)
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
for EsPno := 0; EsPno < 2; EsPno++ {
|
|
1247
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) + uint16(0x6C88)) & uint16(0xFFFF)
|
|
1248
|
+
for NoeXP := 0; NoeXP < 4; NoeXP++ {
|
|
1249
|
+
cbmGh = ((^(cbmGh & uint16(0xFFFF)) & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
|
|
1250
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> 8) | ((cbmGh & uint16(0xFFFF)) << 8)) & uint16(0xFFFF)
|
|
1251
|
+
cbmGh = (cbmGh ^ (((cbmGh & uint16(0xFFFF)) << 12) & uint16(0xFFFF))) & uint16(0xFFFF)
|
|
1252
|
+
}
|
|
1253
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) << uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1254
|
+
}
|
|
1255
|
+
for PTpkN := 0; PTpkN < 4; PTpkN++ {
|
|
1256
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
|
|
1257
|
+
}
|
|
1258
|
+
for wMPIf := 0; wMPIf < 2; wMPIf++ {
|
|
1259
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) >> uint(ywkYl % 16)) | ((cbmGh & uint16(0xFFFF)) << uint(16 - (ywkYl % 16)))) & uint16(0xFFFF)
|
|
1260
|
+
cbmGh = (((cbmGh & uint16(0xFFFF)) << 9) | ((cbmGh & uint16(0xFFFF)) >> 7)) & uint16(0xFFFF)
|
|
1261
|
+
for Fqhur := 0; Fqhur < 4; Fqhur++ {
|
|
1262
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) - uint16(0x132C)) & uint16(0xFFFF)
|
|
1263
|
+
cbmGh = ((cbmGh & uint16(0xFFFF)) + uint16(1)) & uint16(0xFFFF)
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
IdORV[ywkYl] = uint16(cbmGh)
|
|
1267
|
+
}
|
|
1268
|
+
secretGo := string(utf16.Decode(IdORV[:]))
|
|
1269
|
+
|
|
1270
|
+
fmt.Println(secretGo)
|
|
1271
|
+
```
|
|
1272
|
+
|
|
1273
|
+
### Rust encryption (UNICODE example)
|
|
1274
|
+
|
|
1275
|
+
```rust
|
|
1276
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Rust]
|
|
1277
|
+
// secret = "Rust string encryption"
|
|
1278
|
+
let mut ZaoBk: [u16; 23] = [0u16; 23];
|
|
1279
|
+
|
|
1280
|
+
ZaoBk[7] = 0x1051; ZaoBk[12] = 0xA2E0; ZaoBk[13] = 0x500D; ZaoBk[1] = 0x92D4;
|
|
1281
|
+
ZaoBk[18] = 0xEB9E; ZaoBk[9] = 0x4C0C; ZaoBk[0] = 0x946F; ZaoBk[19] = 0x5D14;
|
|
1282
|
+
ZaoBk[14] = 0x8C80; ZaoBk[22] = 0xCE49; ZaoBk[11] = 0x694D; ZaoBk[5] = 0x83CE;
|
|
1283
|
+
ZaoBk[20] = 0x37A6; ZaoBk[6] = 0xE77D; ZaoBk[4] = 0x5888; ZaoBk[15] = 0x8741;
|
|
1284
|
+
ZaoBk[2] = 0x958E; ZaoBk[17] = 0xE60C; ZaoBk[16] = 0xCEB0; ZaoBk[10] = 0xF880;
|
|
1285
|
+
ZaoBk[3] = 0xF6E5; ZaoBk[8] = 0x81CB; ZaoBk[21] = 0xC00E;
|
|
1286
|
+
|
|
1287
|
+
let mut nqUGQ: u16 = 0;
|
|
1288
|
+
for snfNx in 0..23
|
|
1289
|
+
{
|
|
1290
|
+
nqUGQ = ZaoBk[snfNx];
|
|
1291
|
+
for DRCeJ in 0..3
|
|
1292
|
+
{
|
|
1293
|
+
for VLPwO in 0..2
|
|
1294
|
+
{
|
|
1295
|
+
nqUGQ = (nqUGQ ^ (((nqUGQ & 0xFFFF).wrapping_shl((8u32) & 15)) & 0xFFFF)) & 0xFFFF;
|
|
1296
|
+
nqUGQ = (nqUGQ ^ ((nqUGQ & 0xFFFF).wrapping_shr((14u32) & 15))) & 0xFFFF;
|
|
1297
|
+
for ZbJNQ in 0..3
|
|
1298
|
+
{
|
|
1299
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_add(0xE7FA) & 0xFFFF;
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
for xbozp in 0..4
|
|
1304
|
+
{
|
|
1305
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shl((snfNx as u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shr((16u32).wrapping_sub((snfNx as u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1306
|
+
}
|
|
1307
|
+
for JYDzH in 0..4
|
|
1308
|
+
{
|
|
1309
|
+
for QaNjY in 0..4
|
|
1310
|
+
{
|
|
1311
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_sub(1) & 0xFFFF;
|
|
1312
|
+
nqUGQ = (nqUGQ ^ 0xDF4F) & 0xFFFF;
|
|
1313
|
+
}
|
|
1314
|
+
nqUGQ = (nqUGQ ^ ((nqUGQ & 0xFFFF).wrapping_shr((13u32) & 15))) & 0xFFFF;
|
|
1315
|
+
}
|
|
1316
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_add(0xC1D6) & 0xFFFF;
|
|
1317
|
+
for bDPFc in 0..4
|
|
1318
|
+
{
|
|
1319
|
+
nqUGQ = ((nqUGQ ^ 0xFFFF).wrapping_add(1)) & 0xFFFF;
|
|
1320
|
+
}
|
|
1321
|
+
for GuCTV in 0..3
|
|
1322
|
+
{
|
|
1323
|
+
for RNIXt in 0..3
|
|
1324
|
+
{
|
|
1325
|
+
nqUGQ = (nqUGQ ^ (((nqUGQ & 0xFFFF).wrapping_shl((14u32) & 15)) & 0xFFFF)) & 0xFFFF;
|
|
1326
|
+
for ijnWa in 0..4
|
|
1327
|
+
{
|
|
1328
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shr((14u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shl((16u32).wrapping_sub((14u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1329
|
+
nqUGQ = ((nqUGQ ^ 0xFFFF).wrapping_add(1)) & 0xFFFF;
|
|
1330
|
+
nqUGQ = (nqUGQ ^ 0xFFFF) & 0xFFFF;
|
|
1331
|
+
}
|
|
1332
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_add(0xF8AA) & 0xFFFF;
|
|
1333
|
+
}
|
|
1334
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_sub(1) & 0xFFFF;
|
|
1335
|
+
}
|
|
1336
|
+
nqUGQ = (nqUGQ ^ 0xFFFF) & 0xFFFF;
|
|
1337
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shl((1u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shr((16u32).wrapping_sub((1u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1338
|
+
for LaUbu in 0..4
|
|
1339
|
+
{
|
|
1340
|
+
for aHhFw in 0..4
|
|
1341
|
+
{
|
|
1342
|
+
for EqgMf in 0..3
|
|
1343
|
+
{
|
|
1344
|
+
nqUGQ = (nqUGQ ^ (snfNx as u16)) & 0xFFFF;
|
|
1345
|
+
}
|
|
1346
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shr((snfNx as u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shl((16u32).wrapping_sub((snfNx as u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1347
|
+
for bYSgs in 0..2
|
|
1348
|
+
{
|
|
1349
|
+
nqUGQ = ((nqUGQ ^ 0xFFFF).wrapping_add(1)) & 0xFFFF;
|
|
1350
|
+
nqUGQ = (nqUGQ ^ 0x0FD8) & 0xFFFF;
|
|
1351
|
+
nqUGQ = (nqUGQ ^ 0xFFFF) & 0xFFFF;
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
for dkTWb in 0..4
|
|
1356
|
+
{
|
|
1357
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_add(1) & 0xFFFF;
|
|
1358
|
+
}
|
|
1359
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_add(0x02F4) & 0xFFFF;
|
|
1360
|
+
for HcirN in 0..2
|
|
1361
|
+
{
|
|
1362
|
+
for zqcmB in 0..4
|
|
1363
|
+
{
|
|
1364
|
+
nqUGQ = (nqUGQ ^ 0xBDF6) & 0xFFFF;
|
|
1365
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shl((4u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shr((16u32).wrapping_sub((4u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1366
|
+
}
|
|
1367
|
+
for zeBCZ in 0..3
|
|
1368
|
+
{
|
|
1369
|
+
nqUGQ = (nqUGQ & 0xFFFF).wrapping_add(0x3DF3) & 0xFFFF;
|
|
1370
|
+
nqUGQ = (nqUGQ ^ 0xFFFF) & 0xFFFF;
|
|
1371
|
+
}
|
|
1372
|
+
for XLSda in 0..2
|
|
1373
|
+
{
|
|
1374
|
+
for oafFd in 0..4
|
|
1375
|
+
{
|
|
1376
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shr((snfNx as u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shl((16u32).wrapping_sub((snfNx as u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1377
|
+
nqUGQ = ((nqUGQ & 0xFFFF).wrapping_shl((9u32) % 16u32) | (nqUGQ & 0xFFFF).wrapping_shr((16u32).wrapping_sub((9u32) % 16u32).wrapping_rem(16u32))) & 0xFFFF;
|
|
1378
|
+
nqUGQ = ((nqUGQ ^ 0xFFFF).wrapping_add(1)) & 0xFFFF;
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
}
|
|
1382
|
+
ZaoBk[snfNx] = nqUGQ;
|
|
1383
|
+
}
|
|
1384
|
+
let secret = String::from_utf16_lossy(&ZaoBk[..]);
|
|
1385
|
+
|
|
1386
|
+
println!("{}", secret);
|
|
1387
|
+
```
|
|
1388
|
+
|
|
1389
|
+
### Swift encryption (UNICODE example)
|
|
1390
|
+
|
|
1391
|
+
```swift
|
|
1392
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Swift]
|
|
1393
|
+
// swiftSecret = "Swift string encryption"
|
|
1394
|
+
var swiftSecret: String = ""
|
|
1395
|
+
|
|
1396
|
+
var IDqik: [UInt16] = [ 0x3CF5, 0x0432, 0x570D, 0xFF09, 0xE59C, 0xC844, 0xEFBD, 0xF20E,
|
|
1397
|
+
0x00B3, 0x49E0, 0x5693, 0xB64F, 0xB918, 0xD406, 0xA40A, 0xB2F7,
|
|
1398
|
+
0x5F21, 0x98EC, 0xAA18, 0x8F12, 0x7169, 0xC144, 0xE12D ]
|
|
1399
|
+
|
|
1400
|
+
var nhbgA: UInt16 = 0
|
|
1401
|
+
for fpLGc in 0..<23
|
|
1402
|
+
{
|
|
1403
|
+
nhbgA = UInt16(IDqik[fpLGc])
|
|
1404
|
+
for _ in 0..<4
|
|
1405
|
+
{
|
|
1406
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(1)) & UInt16(0xFFFF)
|
|
1407
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1408
|
+
nhbgA = (((nhbgA & UInt16(0xFFFF)) << (fpLGc % 16)) | ((nhbgA & UInt16(0xFFFF)) >> (16 - (fpLGc % 16)))) & UInt16(0xFFFF)
|
|
1409
|
+
}
|
|
1410
|
+
nhbgA = (nhbgA ^ UInt16(0xD283)) & UInt16(0xFFFF)
|
|
1411
|
+
nhbgA = (nhbgA ^ UInt16(0xFFFF)) & UInt16(0xFFFF)
|
|
1412
|
+
for _ in 0..<3
|
|
1413
|
+
{
|
|
1414
|
+
nhbgA = (nhbgA ^ UInt16(0x225A)) & UInt16(0xFFFF)
|
|
1415
|
+
}
|
|
1416
|
+
for _ in 0..<4
|
|
1417
|
+
{
|
|
1418
|
+
nhbgA = (nhbgA ^ ((nhbgA & UInt16(0xFFFF)) >> 13)) & UInt16(0xFFFF)
|
|
1419
|
+
nhbgA = (((nhbgA & UInt16(0xFFFF)) >> 6) | ((nhbgA & UInt16(0xFFFF)) << 10)) & UInt16(0xFFFF)
|
|
1420
|
+
for _ in 0..<3
|
|
1421
|
+
{
|
|
1422
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(1)) & UInt16(0xFFFF)
|
|
1423
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(1)) & UInt16(0xFFFF)
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
for _ in 0..<3
|
|
1427
|
+
{
|
|
1428
|
+
nhbgA = (nhbgA ^ ((nhbgA & UInt16(0xFFFF)) >> 9)) & UInt16(0xFFFF)
|
|
1429
|
+
for _ in 0..<2
|
|
1430
|
+
{
|
|
1431
|
+
for _ in 0..<2
|
|
1432
|
+
{
|
|
1433
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1434
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(0xEED7)) & UInt16(0xFFFF)
|
|
1435
|
+
}
|
|
1436
|
+
for _ in 0..<2
|
|
1437
|
+
{
|
|
1438
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1439
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(1)) & UInt16(0xFFFF)
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1442
|
+
nhbgA = (nhbgA ^ (((nhbgA & UInt16(0xFFFF)) << 10) & UInt16(0xFFFF))) & UInt16(0xFFFF)
|
|
1443
|
+
}
|
|
1444
|
+
nhbgA = (((~(nhbgA & UInt16(0xFFFF))) & UInt16(0xFFFF)) &+ UInt16(1)) & UInt16(0xFFFF)
|
|
1445
|
+
for _ in 0..<4
|
|
1446
|
+
{
|
|
1447
|
+
nhbgA = (((nhbgA & UInt16(0xFFFF)) >> (fpLGc % 16)) | ((nhbgA & UInt16(0xFFFF)) << (16 - (fpLGc % 16)))) & UInt16(0xFFFF)
|
|
1448
|
+
for _ in 0..<3
|
|
1449
|
+
{
|
|
1450
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(1)) & UInt16(0xFFFF)
|
|
1451
|
+
nhbgA = (((nhbgA & UInt16(0xFFFF)) >> 12) | ((nhbgA & UInt16(0xFFFF)) << 4)) & UInt16(0xFFFF)
|
|
1452
|
+
for _ in 0..<4
|
|
1453
|
+
{
|
|
1454
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(0x264C)) & UInt16(0xFFFF)
|
|
1455
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(0xE417)) & UInt16(0xFFFF)
|
|
1456
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(1)) & UInt16(0xFFFF)
|
|
1457
|
+
}
|
|
1458
|
+
}
|
|
1459
|
+
}
|
|
1460
|
+
nhbgA = (((nhbgA & UInt16(0xFFFF)) >> (fpLGc % 16)) | ((nhbgA & UInt16(0xFFFF)) << (16 - (fpLGc % 16)))) & UInt16(0xFFFF)
|
|
1461
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(0xA438)) & UInt16(0xFFFF)
|
|
1462
|
+
for _ in 0..<3
|
|
1463
|
+
{
|
|
1464
|
+
for _ in 0..<3
|
|
1465
|
+
{
|
|
1466
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(1)) & UInt16(0xFFFF)
|
|
1467
|
+
for _ in 0..<3
|
|
1468
|
+
{
|
|
1469
|
+
nhbgA = (nhbgA ^ UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1470
|
+
nhbgA = (((~(nhbgA & UInt16(0xFFFF))) & UInt16(0xFFFF)) &+ UInt16(1)) & UInt16(0xFFFF)
|
|
1471
|
+
}
|
|
1472
|
+
for _ in 0..<2
|
|
1473
|
+
{
|
|
1474
|
+
nhbgA = (nhbgA ^ (((nhbgA & UInt16(0xFFFF)) << 13) & UInt16(0xFFFF))) & UInt16(0xFFFF)
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
}
|
|
1478
|
+
nhbgA = (nhbgA ^ UInt16(0x5F00)) & UInt16(0xFFFF)
|
|
1479
|
+
for _ in 0..<3
|
|
1480
|
+
{
|
|
1481
|
+
for _ in 0..<4
|
|
1482
|
+
{
|
|
1483
|
+
nhbgA = (nhbgA ^ ((nhbgA & UInt16(0xFFFF)) >> 15)) & UInt16(0xFFFF)
|
|
1484
|
+
for _ in 0..<2
|
|
1485
|
+
{
|
|
1486
|
+
nhbgA = (nhbgA ^ (((nhbgA & UInt16(0xFFFF)) << 10) & UInt16(0xFFFF))) & UInt16(0xFFFF)
|
|
1487
|
+
}
|
|
1488
|
+
for _ in 0..<4
|
|
1489
|
+
{
|
|
1490
|
+
nhbgA = (nhbgA ^ UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
nhbgA = (nhbgA ^ ((nhbgA & UInt16(0xFFFF)) >> 14)) & UInt16(0xFFFF)
|
|
1494
|
+
}
|
|
1495
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &+ UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1496
|
+
for _ in 0..<3
|
|
1497
|
+
{
|
|
1498
|
+
nhbgA = (((nhbgA & UInt16(0xFFFF)) >> 8) | ((nhbgA & UInt16(0xFFFF)) << 8)) & UInt16(0xFFFF)
|
|
1499
|
+
nhbgA = ((nhbgA & UInt16(0xFFFF)) &- UInt16(fpLGc)) & UInt16(0xFFFF)
|
|
1500
|
+
}
|
|
1501
|
+
IDqik[fpLGc] = UInt16(nhbgA)
|
|
1502
|
+
swiftSecret = String(decoding: IDqik, as: UTF16.self)
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
print(swiftSecret)
|
|
1506
|
+
```
|
|
1507
|
+
|
|
1508
|
+
### Lua encryption (UNICODE example)
|
|
1509
|
+
|
|
1510
|
+
```lua
|
|
1511
|
+
-- encrypted with https://www.stringencrypt.com (v1.5.0) [Lua]
|
|
1512
|
+
-- Requires Lua 5.3+ (bitwise operators: &, |, ~, <<, >>)
|
|
1513
|
+
-- Unicode: utf8.char() for BMP code points (string.char only accepts 0..255)
|
|
1514
|
+
-- luaSecret = "Lua string encryption"
|
|
1515
|
+
local luaSecret = { 0x819A, 0x251F, 0x20EF, 0x2473, 0x3770, 0xACE5, 0x57AC, 0x5FB6,
|
|
1516
|
+
0xA232, 0x7349, 0xBB95, 0x5CC2, 0xE7B1, 0x8AF8, 0xB07D, 0x80B5,
|
|
1517
|
+
0x005A, 0x4FE4, 0x76DA, 0x8684, 0xCD7D }
|
|
1518
|
+
|
|
1519
|
+
local cBxhf = 0
|
|
1520
|
+
for JuYFm = 0, 21 - 1 do
|
|
1521
|
+
cBxhf = luaSecret[JuYFm + 1]
|
|
1522
|
+
for GweYp = 1, 4 do
|
|
1523
|
+
cBxhf = (cBxhf ~ (((cBxhf & 0xFFFF) << 11) & 0xFFFF)) & 0xFFFF
|
|
1524
|
+
cBxhf = (((cBxhf & 0xFFFF) >> 7) | ((cBxhf & 0xFFFF) << 9)) & 0xFFFF
|
|
1525
|
+
cBxhf = ((cBxhf & 0xFFFF) - 0x08F7) & 0xFFFF
|
|
1526
|
+
end
|
|
1527
|
+
cBxhf = (cBxhf ~ ((cBxhf & 0xFFFF) >> 9)) & 0xFFFF
|
|
1528
|
+
cBxhf = ((((cBxhf & 0xFFFF) >> 8) | ((cBxhf & 0xFFFF) << 8)) & 0xFFFF)
|
|
1529
|
+
for oJScO = 1, 3 do
|
|
1530
|
+
cBxhf = (((cBxhf & 0xFFFF) >> (JuYFm % 16)) | ((cBxhf & 0xFFFF) << (16 - (JuYFm % 16)))) & 0xFFFF
|
|
1531
|
+
for VCOYf = 1, 3 do
|
|
1532
|
+
for Bozka = 1, 4 do
|
|
1533
|
+
cBxhf = (cBxhf ~ JuYFm) & 0xFFFF
|
|
1534
|
+
cBxhf = ((cBxhf & 0xFFFF) + JuYFm) & 0xFFFF
|
|
1535
|
+
end
|
|
1536
|
+
end
|
|
1537
|
+
end
|
|
1538
|
+
cBxhf = (cBxhf ~ 0xDB0C) & 0xFFFF
|
|
1539
|
+
cBxhf = ((cBxhf & 0xFFFF) - 1) & 0xFFFF
|
|
1540
|
+
for OAbZp = 1, 2 do
|
|
1541
|
+
cBxhf = ((cBxhf & 0xFFFF) + 1) & 0xFFFF
|
|
1542
|
+
end
|
|
1543
|
+
for FoYMh = 1, 4 do
|
|
1544
|
+
cBxhf = ((cBxhf ~ 0xFFFF) & 0xFFFF)
|
|
1545
|
+
cBxhf = ((cBxhf & 0xFFFF) + 0x1A96) & 0xFFFF
|
|
1546
|
+
end
|
|
1547
|
+
cBxhf = (((cBxhf & 0xFFFF) >> (JuYFm % 16)) | ((cBxhf & 0xFFFF) << (16 - (JuYFm % 16)))) & 0xFFFF
|
|
1548
|
+
cBxhf = ((cBxhf & 0xFFFF) - JuYFm) & 0xFFFF
|
|
1549
|
+
luaSecret[JuYFm + 1] = cBxhf
|
|
1550
|
+
end
|
|
1551
|
+
|
|
1552
|
+
local SBvyf = {}
|
|
1553
|
+
for SMmeg = 1, #luaSecret do
|
|
1554
|
+
SBvyf[SMmeg] = utf8.char((luaSecret[SMmeg] & 0xFFFF))
|
|
1555
|
+
end
|
|
1556
|
+
luaSecret = table.concat(SBvyf)
|
|
1557
|
+
|
|
1558
|
+
|
|
1559
|
+
print(luaSecret)
|
|
1560
|
+
```
|
|
1561
|
+
|
|
1562
|
+
### Objective-C encryption (UNICODE example)
|
|
1563
|
+
|
|
1564
|
+
```objc
|
|
1565
|
+
// encrypted with https://www.stringencrypt.com (v1.5.0) [Objective-C]
|
|
1566
|
+
// objcSecret = "Objective-C NSString"
|
|
1567
|
+
unsigned short objcSecret[21];
|
|
1568
|
+
|
|
1569
|
+
objcSecret[3] = 0xA888; objcSecret[9] = 0x64FE; objcSecret[4] = 0x0399; objcSecret[8] = 0xC613;
|
|
1570
|
+
objcSecret[5] = 0x5B69; objcSecret[7] = 0xCAD4; objcSecret[1] = 0xDEC0; objcSecret[18] = 0x7213;
|
|
1571
|
+
objcSecret[13] = 0xE767; objcSecret[20] = 0xC9C3; objcSecret[0] = 0x76FD; objcSecret[14] = 0xE1CE;
|
|
1572
|
+
objcSecret[16] = 0x491E; objcSecret[6] = 0x7B59; objcSecret[10] = 0x3FDE; objcSecret[15] = 0xE867;
|
|
1573
|
+
objcSecret[19] = 0xC3F8; objcSecret[2] = 0x6E4A; objcSecret[11] = 0x77EE; objcSecret[17] = 0x0D46;
|
|
1574
|
+
objcSecret[12] = 0xDAE8;
|
|
1575
|
+
|
|
1576
|
+
for (unsigned int pwrWB = 0, ORZzX = 0; pwrWB < 21; pwrWB++)
|
|
1577
|
+
{
|
|
1578
|
+
ORZzX = objcSecret[pwrWB];
|
|
1579
|
+
for (unsigned int LyZQA = 0; LyZQA < 2; LyZQA++)
|
|
1580
|
+
{
|
|
1581
|
+
ORZzX = ((ORZzX & 0xFFFF) + 1) & 0xFFFF;
|
|
1582
|
+
ORZzX = (ORZzX ^ (((ORZzX & 0xFFFF) << 8) & 0xFFFF)) & 0xFFFF;
|
|
1583
|
+
for (unsigned int EodCh = 0; EodCh < 2; EodCh++)
|
|
1584
|
+
{
|
|
1585
|
+
for (unsigned int TkHYN = 0; TkHYN < 3; TkHYN++)
|
|
1586
|
+
{
|
|
1587
|
+
ORZzX = ((ORZzX & 0xFFFF) + 1) & 0xFFFF;
|
|
1588
|
+
ORZzX = (((ORZzX & 0xFFFF) << 1) | ((ORZzX & 0xFFFF) >> 15)) & 0xFFFF;
|
|
1589
|
+
ORZzX = ((ORZzX & 0xFFFF) - pwrWB) & 0xFFFF;
|
|
1590
|
+
}
|
|
1591
|
+
for (unsigned int djneP = 0; djneP < 3; djneP++)
|
|
1592
|
+
{
|
|
1593
|
+
ORZzX = (ORZzX ^ (((ORZzX & 0xFFFF) << 10) & 0xFFFF)) & 0xFFFF;
|
|
1594
|
+
ORZzX = (((ORZzX & 0xFFFF) >> 5) | ((ORZzX & 0xFFFF) << 11)) & 0xFFFF;
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
ORZzX = ((ORZzX & 0xFFFF) + pwrWB) & 0xFFFF;
|
|
1599
|
+
for (unsigned int BfPGc = 0; BfPGc < 4; BfPGc++)
|
|
1600
|
+
{
|
|
1601
|
+
for (unsigned int rbejn = 0; rbejn < 2; rbejn++)
|
|
1602
|
+
{
|
|
1603
|
+
ORZzX = (ORZzX ^ 0xFFFF) & 0xFFFF;
|
|
1604
|
+
ORZzX = (((ORZzX & 0xFFFF) >> 8) | ((ORZzX & 0xFFFF) << 8)) & 0xFFFF;
|
|
1605
|
+
for (unsigned int BWVfH = 0; BWVfH < 3; BWVfH++)
|
|
1606
|
+
{
|
|
1607
|
+
ORZzX = ((ORZzX & 0xFFFF) + 1) & 0xFFFF;
|
|
1608
|
+
ORZzX = (((ORZzX & 0xFFFF) << (pwrWB % 16)) | ((ORZzX & 0xFFFF) >> (16 - (pwrWB % 16)))) & 0xFFFF;
|
|
1609
|
+
}
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1612
|
+
ORZzX = ((ORZzX & 0xFFFF) + 0x7CB1) & 0xFFFF;
|
|
1613
|
+
for (unsigned int vMrnS = 0; vMrnS < 4; vMrnS++)
|
|
1614
|
+
{
|
|
1615
|
+
for (unsigned int asvBV = 0; asvBV < 4; asvBV++)
|
|
1616
|
+
{
|
|
1617
|
+
for (unsigned int jsDCX = 0; jsDCX < 2; jsDCX++)
|
|
1618
|
+
{
|
|
1619
|
+
ORZzX = (((ORZzX & 0xFFFF) << (pwrWB % 16)) | ((ORZzX & 0xFFFF) >> (16 - (pwrWB % 16)))) & 0xFFFF;
|
|
1620
|
+
ORZzX = (ORZzX ^ pwrWB) & 0xFFFF;
|
|
1621
|
+
ORZzX = (ORZzX ^ 0xFFFF) & 0xFFFF;
|
|
1622
|
+
}
|
|
1623
|
+
for (unsigned int QceiD = 0; QceiD < 3; QceiD++)
|
|
1624
|
+
{
|
|
1625
|
+
ORZzX = (ORZzX ^ (((ORZzX & 0xFFFF) << 9) & 0xFFFF)) & 0xFFFF;
|
|
1626
|
+
ORZzX = (((ORZzX & 0xFFFF) << 11) | ((ORZzX & 0xFFFF) >> 5)) & 0xFFFF;
|
|
1627
|
+
}
|
|
1628
|
+
}
|
|
1629
|
+
}
|
|
1630
|
+
ORZzX = (((~(ORZzX & 0xFFFF)) & 0xFFFF) + 1) & 0xFFFF;
|
|
1631
|
+
for (unsigned int rzCFJ = 0; rzCFJ < 2; rzCFJ++)
|
|
1632
|
+
{
|
|
1633
|
+
ORZzX = ((ORZzX & 0xFFFF) + 1) & 0xFFFF;
|
|
1634
|
+
ORZzX = (((ORZzX & 0xFFFF) >> (pwrWB % 16)) | ((ORZzX & 0xFFFF) << (16 - (pwrWB % 16)))) & 0xFFFF;
|
|
1635
|
+
}
|
|
1636
|
+
ORZzX = ((ORZzX & 0xFFFF) + 0xD6AC) & 0xFFFF;
|
|
1637
|
+
objcSecret[pwrWB] = ORZzX;
|
|
1638
|
+
}
|
|
1639
|
+
|
|
1640
|
+
NSLog(@"%@", [NSString stringWithUTF16String:(const unichar *)objcSecret]); // TODO: length / encoding
|
|
1641
|
+
```
|
|
1642
|
+
|
|
1643
|
+
### AutoIt encryption (UNICODE example)
|
|
1644
|
+
|
|
1645
|
+
```autoit
|
|
1646
|
+
; encrypted with https://www.stringencrypt.com (v1.5.0) [AutoIt]
|
|
1647
|
+
#include <Array.au3>
|
|
1648
|
+
|
|
1649
|
+
; $autoit_obfuscator = "We got it too https://www.pelock.com/products/autoit-obfuscator"
|
|
1650
|
+
Global $autoit_obfuscator[64] = [ 0x2C7A, 0xA37B, 0xCCC5, 0x93A2, 0x1E59, 0xFC37, 0x7A2B, 0x9153, _
|
|
1651
|
+
0xFADB, 0x040D, 0x5626, 0xB695, 0x31B7, 0x7DE6, 0x44C3, 0x83E5, _
|
|
1652
|
+
0xF469, 0xDB4C, 0xF667, 0xD360, 0xA82F, 0x3F3B, 0x3F26, 0xEA32, _
|
|
1653
|
+
0xF43B, 0x3910, 0x7E2D, 0x639F, 0x35CD, 0xBB6B, 0xD1D4, 0xDCCF, _
|
|
1654
|
+
0x237E, 0xCD82, 0x99FF, 0x84F7, 0x882E, 0xEE4C, 0xFC3F, 0x7F34, _
|
|
1655
|
+
0x3143, 0x33E2, 0xF130, 0x24A9, 0x26DF, 0xB84E, 0x76DA, 0x95C4, _
|
|
1656
|
+
0x2CC3, 0x8D11, 0x3A3F, 0x07B1, 0x8686, 0x983C, 0x0708, 0x978E, _
|
|
1657
|
+
0xBB44, 0xB835, 0xD402, 0x55AF, 0xB7A9, 0x498C, 0x5907, 0x6C78 ]
|
|
1658
|
+
|
|
1659
|
+
Local $uxYFn
|
|
1660
|
+
Local $JjGwl
|
|
1661
|
+
Local $ELsAr
|
|
1662
|
+
Local $zQTqo
|
|
1663
|
+
Local $gmbXt
|
|
1664
|
+
Local $MzeHF
|
|
1665
|
+
Local $EOspd
|
|
1666
|
+
Local $fXqkF
|
|
1667
|
+
Local $PWZqH
|
|
1668
|
+
Local $uEHXM
|
|
1669
|
+
Local $eKQrB
|
|
1670
|
+
Local $lfoFV
|
|
1671
|
+
Local $EydXK
|
|
1672
|
+
|
|
1673
|
+
For $EydXK = 0 to 63
|
|
1674
|
+
$uxYFn = $autoit_obfuscator[$EydXK]
|
|
1675
|
+
For $JjGwl = 0 to 2
|
|
1676
|
+
For $ELsAr = 0 to 3
|
|
1677
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) - 0x31EE, 0xFFFF)
|
|
1678
|
+
Next
|
|
1679
|
+
For $zQTqo = 0 to 2
|
|
1680
|
+
For $gmbXt = 0 to 2
|
|
1681
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) + $EydXK, 0xFFFF)
|
|
1682
|
+
Next
|
|
1683
|
+
Next
|
|
1684
|
+
For $MzeHF = 0 to 3
|
|
1685
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) + 0x9D00, 0xFFFF)
|
|
1686
|
+
For $EOspd = 0 to 1
|
|
1687
|
+
$uxYFn = BitAND(BitXOR(BitAND($uxYFn, 0xFFFF), 0xFFFF) + 1, 0xFFFF)
|
|
1688
|
+
$uxYFn = BitAND(BitOR(BitShift(BitAND($uxYFn, 0xFFFF), 8), BitShift(BitAND($uxYFn, 0xFFFF), -8)), 0xFFFF)
|
|
1689
|
+
Next
|
|
1690
|
+
For $fXqkF = 0 to 2
|
|
1691
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) - $EydXK, 0xFFFF)
|
|
1692
|
+
$uxYFn = BitAND(BitOR(BitShift(BitAND($uxYFn, 0xFFFF), 3), BitShift(BitAND($uxYFn, 0xFFFF), -13)), 0xFFFF)
|
|
1693
|
+
Next
|
|
1694
|
+
Next
|
|
1695
|
+
Next
|
|
1696
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) - 1, 0xFFFF)
|
|
1697
|
+
For $PWZqH = 0 to 2
|
|
1698
|
+
$uxYFn = BitAND(BitXOR($uxYFn, BitShift(BitAND($uxYFn, 0xFFFF), 13)), 0xFFFF)
|
|
1699
|
+
For $uEHXM = 0 to 3
|
|
1700
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) - $EydXK, 0xFFFF)
|
|
1701
|
+
For $eKQrB = 0 to 3
|
|
1702
|
+
$uxYFn = BitAND(BitXOR($uxYFn, BitShift(BitAND($uxYFn, 0xFFFF), 11)), 0xFFFF)
|
|
1703
|
+
Next
|
|
1704
|
+
For $lfoFV = 0 to 3
|
|
1705
|
+
$uxYFn = BitAND(BitXOR($uxYFn, 0xA378), 0xFFFF)
|
|
1706
|
+
$uxYFn = BitAND(BitXOR($uxYFn, BitShift(BitAND($uxYFn, 0xFFFF), 10)), 0xFFFF)
|
|
1707
|
+
Next
|
|
1708
|
+
Next
|
|
1709
|
+
Next
|
|
1710
|
+
$uxYFn = BitAND(BitOR(BitShift(BitAND($uxYFn, 0xFFFF), -9), BitShift(BitAND($uxYFn, 0xFFFF), 7)), 0xFFFF)
|
|
1711
|
+
$uxYFn = BitAND(BitOR(BitShift(BitAND($uxYFn, 0xFFFF), Mod($EydXK, 16)), BitShift(BitAND($uxYFn, 0xFFFF), Mod($EydXK, 16) - 16)), 0xFFFF)
|
|
1712
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) + 0xBA6E, 0xFFFF)
|
|
1713
|
+
$uxYFn = BitAND(BitAND($uxYFn, 0xFFFF) + 1, 0xFFFF)
|
|
1714
|
+
$autoit_obfuscator[$EydXK] = ChrW(BitAND($uxYFn, 0xFFFF))
|
|
1715
|
+
Next
|
|
1716
|
+
|
|
1717
|
+
$autoit_obfuscator = _ArrayToString($autoit_obfuscator, "")
|
|
1718
|
+
|
|
1719
|
+
ConsoleWrite($autoit_obfuscator)
|
|
1720
|
+
```
|
|
1721
|
+
|
|
1722
|
+
### PowerShell encryption (UNICODE example)
|
|
1723
|
+
|
|
1724
|
+
```powershell
|
|
1725
|
+
# encrypted with https://www.stringencrypt.com (v1.5.0) [PowerShell]
|
|
1726
|
+
# $Label = "Well, it has some interesting syntax!"
|
|
1727
|
+
[uint16[]] $VmBdz = 0xDAD8, 0x5B96, 0x69A8, 0xE645, 0x103E, 0x2EC6, 0xF952, 0xB9BC,
|
|
1728
|
+
0x5B7E, 0x5BE4, 0x9351, 0xBA3D, 0x8B87, 0x2602, 0x7B86, 0x7644,
|
|
1729
|
+
0x1181, 0x9F1A, 0x2B2C, 0x7F19, 0xEE51, 0xFF94, 0x45F4, 0xC9AB,
|
|
1730
|
+
0x9E16, 0xE741, 0x2EAF, 0x9B92, 0x2A9B, 0xCB47, 0xE5F1, 0x6487,
|
|
1731
|
+
0x3FF0, 0x45DC, 0x8D7E, 0x16E2, 0x0E6A
|
|
1732
|
+
[string] $Label = ""
|
|
1733
|
+
|
|
1734
|
+
for ($UiSVa = 0; $UiSVa -lt 37; $UiSVa++)
|
|
1735
|
+
{
|
|
1736
|
+
$DVjgE = $VmBdz[$UiSVa]
|
|
1737
|
+
$DVjgE = (($DVjgE -band 0xFFFF) + 1) -band 0xFFFF
|
|
1738
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -shr 8) -bor (($DVjgE -band 0xFFFF) -shl 8)) -band 0xFFFF
|
|
1739
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -shl ($UiSVa % 16)) -bor (($DVjgE -band 0xFFFF) -shr (16 - ($UiSVa % 16)))) -band 0xFFFF
|
|
1740
|
+
$DVjgE = ($DVjgE -bxor $UiSVa) -band 0xFFFF
|
|
1741
|
+
$DVjgE = (($DVjgE -band 0xFFFF) - 0xB874) -band 0xFFFF
|
|
1742
|
+
for ($gxBSZ = 0; $gxBSZ -lt 3; $gxBSZ++)
|
|
1743
|
+
{
|
|
1744
|
+
for ($wSFcZ = 0; $wSFcZ -lt 2; $wSFcZ++)
|
|
1745
|
+
{
|
|
1746
|
+
for ($JnYoy = 0; $JnYoy -lt 4; $JnYoy++)
|
|
1747
|
+
{
|
|
1748
|
+
$DVjgE = (($DVjgE -band 0xFFFF) - $UiSVa) -band 0xFFFF
|
|
1749
|
+
$DVjgE = (($DVjgE -band 0xFFFF) - 0xE5E3) -band 0xFFFF
|
|
1750
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -shr 3) -bor (($DVjgE -band 0xFFFF) -shl 13)) -band 0xFFFF
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
for ($FaUdp = 0; $FaUdp -lt 4; $FaUdp++)
|
|
1754
|
+
{
|
|
1755
|
+
$DVjgE = (($DVjgE -band 0xFFFF) - 0xF6F9) -band 0xFFFF
|
|
1756
|
+
for ($nHlOA = 0; $nHlOA -lt 2; $nHlOA++)
|
|
1757
|
+
{
|
|
1758
|
+
$DVjgE = ($DVjgE -bxor $UiSVa) -band 0xFFFF
|
|
1759
|
+
$DVjgE = (($DVjgE -band 0xFFFF) - $UiSVa) -band 0xFFFF
|
|
1760
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -bxor 0xFFFF) + 1) -band 0xFFFF
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
}
|
|
1764
|
+
for ($xMFbR = 0; $xMFbR -lt 3; $xMFbR++)
|
|
1765
|
+
{
|
|
1766
|
+
for ($YjHOl = 0; $YjHOl -lt 2; $YjHOl++)
|
|
1767
|
+
{
|
|
1768
|
+
$DVjgE = (($DVjgE -band 0xFFFF) + $UiSVa) -band 0xFFFF
|
|
1769
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -bxor 0xFFFF) + 1) -band 0xFFFF
|
|
1770
|
+
}
|
|
1771
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -shr 3) -bor (($DVjgE -band 0xFFFF) -shl 13)) -band 0xFFFF
|
|
1772
|
+
$DVjgE = (($DVjgE -band 0xFFFF) - 1) -band 0xFFFF
|
|
1773
|
+
}
|
|
1774
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -shr 7) -bor (($DVjgE -band 0xFFFF) -shl 9)) -band 0xFFFF
|
|
1775
|
+
$DVjgE = ((($DVjgE -band 0xFFFF) -bxor 0xFFFF) + 1) -band 0xFFFF
|
|
1776
|
+
$DVjgE = ($DVjgE -bxor $UiSVa) -band 0xFFFF
|
|
1777
|
+
$Label += [char]($DVjgE -band 0xFFFF)
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
Write-Host $Label
|
|
1781
|
+
```
|
|
1782
|
+
|
|
1783
|
+
### Haskell encryption (ANSI example)
|
|
1784
|
+
|
|
1785
|
+
```haskell
|
|
1786
|
+
-- encrypted with https://www.stringencrypt.com (v1.5.0) [Haskell]
|
|
1787
|
+
module Main where
|
|
1788
|
+
|
|
1789
|
+
import qualified Data.Char
|
|
1790
|
+
import qualified Data.Bits
|
|
1791
|
+
|
|
1792
|
+
main = do
|
|
1793
|
+
putStrLn $ gimmeh
|
|
1794
|
+
|
|
1795
|
+
-- gimmeh = "Monads! I need more Monads!"
|
|
1796
|
+
gimmeh = zipWith f [0..] [ 0x99, 0x68, 0x69, 0x6B, 0x2C, 0xEC, 0x42, 0x43,
|
|
1797
|
+
0xE1, 0x25, 0xF1, 0x72, 0x63, 0x64, 0x29, 0x75,
|
|
1798
|
+
0x46, 0x07, 0x09, 0xDE, 0xAC, 0xFB, 0xFC, 0xFE,
|
|
1799
|
+
0x7E, 0xBE, 0x94 ]
|
|
1800
|
+
where
|
|
1801
|
+
f brtgn yeubg = let xsfdz0 = yeubg
|
|
1802
|
+
xsfdz1 = xsfdz0 - brtgn
|
|
1803
|
+
xsfdz2 = negate xsfdz1
|
|
1804
|
+
xsfdz3 = xsfdz2 + 1
|
|
1805
|
+
xsfdz4 = xsfdz3 - 0x6F
|
|
1806
|
+
xsfdz5 = xsfdz4 `Data.Bits.xor` 0xB7
|
|
1807
|
+
xsfdz6 = negate xsfdz5
|
|
1808
|
+
xsfdz7 = xsfdz6 `Data.Bits.xor` (Data.Bits.shiftL xsfdz6 6 Data.Bits..&. 0xFF)
|
|
1809
|
+
xsfdz8 = Data.Bits.rotateL xsfdz7 4
|
|
1810
|
+
xsfdz9 = xsfdz8 - 1
|
|
1811
|
+
xsfdz10 = xsfdz9 - brtgn
|
|
1812
|
+
xsfdz11 = xsfdz10 - 0xD5
|
|
1813
|
+
in Data.Char.chr (xsfdz11 Data.Bits..&. 0xFF)
|
|
1814
|
+
```
|
|
1815
|
+
|
|
1816
|
+
### MASM Assembler 32 bit encryption (UNICODE example)
|
|
1817
|
+
|
|
1818
|
+
```asm
|
|
1819
|
+
; encrypted with https://www.stringencrypt.com (v1.5.0) [MASM Assembler (32 bit)]
|
|
1820
|
+
|
|
1821
|
+
; szMyGoodOldFriend = "I will be always here :)"
|
|
1822
|
+
local szMyGoodOldFriend[25]:word
|
|
1823
|
+
|
|
1824
|
+
lea ecx, szMyGoodOldFriend
|
|
1825
|
+
|
|
1826
|
+
mov word ptr [ecx + 23], 025CEh
|
|
1827
|
+
mov word ptr [ecx + 1], 0275Eh
|
|
1828
|
+
mov word ptr [ecx + 8], 0D085h
|
|
1829
|
+
mov word ptr [ecx + 20], 0EBABh
|
|
1830
|
+
mov word ptr [ecx + 7], 0E321h
|
|
1831
|
+
mov word ptr [ecx + 4], 00B03h
|
|
1832
|
+
mov word ptr [ecx + 18], 00149h
|
|
1833
|
+
mov word ptr [ecx + 19], 0F5C9h
|
|
1834
|
+
mov word ptr [ecx + 13], 03E86h
|
|
1835
|
+
mov word ptr [ecx + 17], 03908h
|
|
1836
|
+
mov word ptr [ecx + 16], 09E1Bh
|
|
1837
|
+
mov word ptr [ecx + 11], 0B6CFh
|
|
1838
|
+
mov word ptr [ecx + 15], 064B2h
|
|
1839
|
+
mov word ptr [ecx + 10], 02C84h
|
|
1840
|
+
mov word ptr [ecx + 0], 09E02h
|
|
1841
|
+
mov word ptr [ecx + 14], 043E8h
|
|
1842
|
+
mov word ptr [ecx + 9], 00925h
|
|
1843
|
+
mov word ptr [ecx + 5], 00323h
|
|
1844
|
+
mov word ptr [ecx + 12], 03D5Fh
|
|
1845
|
+
mov word ptr [ecx + 22], 02B04h
|
|
1846
|
+
mov word ptr [ecx + 24], 06CA4h
|
|
1847
|
+
mov word ptr [ecx + 6], 066B8h
|
|
1848
|
+
mov word ptr [ecx + 2], 0E4FAh
|
|
1849
|
+
mov word ptr [ecx + 21], 00ED1h
|
|
1850
|
+
mov word ptr [ecx + 3], 00549h
|
|
1851
|
+
|
|
1852
|
+
mov eax, 25
|
|
1853
|
+
xor ebx, ebx
|
|
1854
|
+
|
|
1855
|
+
@@:
|
|
1856
|
+
mov dx, word ptr [ecx + ebx]
|
|
1857
|
+
sub edx, 06818h
|
|
1858
|
+
add edx, 0B8AAh
|
|
1859
|
+
|
|
1860
|
+
push eax
|
|
1861
|
+
mov eax, 4
|
|
1862
|
+
PazJT:
|
|
1863
|
+
push eax
|
|
1864
|
+
movzx eax, dx
|
|
1865
|
+
shl eax, 13
|
|
1866
|
+
and ax, 0xFFFF
|
|
1867
|
+
xor dx, ax
|
|
1868
|
+
pop eax
|
|
1869
|
+
|
|
1870
|
+
push eax
|
|
1871
|
+
mov eax, 2
|
|
1872
|
+
OjDVG:
|
|
1873
|
+
not edx
|
|
1874
|
+
xor edx, ebx
|
|
1875
|
+
|
|
1876
|
+
push eax
|
|
1877
|
+
mov eax, 2
|
|
1878
|
+
UjDCE:
|
|
1879
|
+
rol dx, 8
|
|
1880
|
+
push edx
|
|
1881
|
+
mov cl, bl
|
|
1882
|
+
rol word ptr [esp], cl
|
|
1883
|
+
pop edx
|
|
1884
|
+
dec eax
|
|
1885
|
+
jne UjDCE
|
|
1886
|
+
pop eax
|
|
1887
|
+
|
|
1888
|
+
dec eax
|
|
1889
|
+
jne OjDVG
|
|
1890
|
+
pop eax
|
|
1891
|
+
|
|
1892
|
+
dec eax
|
|
1893
|
+
jne PazJT
|
|
1894
|
+
pop eax
|
|
1895
|
+
|
|
1896
|
+
|
|
1897
|
+
push eax
|
|
1898
|
+
mov eax, 2
|
|
1899
|
+
DFjca:
|
|
1900
|
+
|
|
1901
|
+
push eax
|
|
1902
|
+
mov eax, 4
|
|
1903
|
+
mPryd:
|
|
1904
|
+
|
|
1905
|
+
push eax
|
|
1906
|
+
mov eax, 3
|
|
1907
|
+
hgjbG:
|
|
1908
|
+
inc edx
|
|
1909
|
+
push edx
|
|
1910
|
+
mov cl, bl
|
|
1911
|
+
ror word ptr [esp], cl
|
|
1912
|
+
pop edx
|
|
1913
|
+
sub edx, ebx
|
|
1914
|
+
dec eax
|
|
1915
|
+
jne hgjbG
|
|
1916
|
+
pop eax
|
|
1917
|
+
|
|
1918
|
+
|
|
1919
|
+
push eax
|
|
1920
|
+
mov eax, 4
|
|
1921
|
+
VeiyM:
|
|
1922
|
+
dec edx
|
|
1923
|
+
not edx
|
|
1924
|
+
dec eax
|
|
1925
|
+
jne VeiyM
|
|
1926
|
+
pop eax
|
|
1927
|
+
|
|
1928
|
+
neg edx
|
|
1929
|
+
dec eax
|
|
1930
|
+
jne mPryd
|
|
1931
|
+
pop eax
|
|
1932
|
+
|
|
1933
|
+
xor edx, 0A257h
|
|
1934
|
+
push edx
|
|
1935
|
+
mov cl, bl
|
|
1936
|
+
rol word ptr [esp], cl
|
|
1937
|
+
pop edx
|
|
1938
|
+
dec eax
|
|
1939
|
+
jne DFjca
|
|
1940
|
+
pop eax
|
|
1941
|
+
|
|
1942
|
+
sub edx, 0EEDDh
|
|
1943
|
+
inc edx
|
|
1944
|
+
|
|
1945
|
+
push eax
|
|
1946
|
+
mov eax, 2
|
|
1947
|
+
VIHTa:
|
|
1948
|
+
add edx, ebx
|
|
1949
|
+
dec eax
|
|
1950
|
+
jne VIHTa
|
|
1951
|
+
pop eax
|
|
1952
|
+
|
|
1953
|
+
dec edx
|
|
1954
|
+
sub edx, ebx
|
|
1955
|
+
inc edx
|
|
1956
|
+
|
|
1957
|
+
push eax
|
|
1958
|
+
mov eax, 2
|
|
1959
|
+
vRUrO:
|
|
1960
|
+
push edx
|
|
1961
|
+
mov cl, bl
|
|
1962
|
+
ror word ptr [esp], cl
|
|
1963
|
+
pop edx
|
|
1964
|
+
sub edx, ebx
|
|
1965
|
+
neg edx
|
|
1966
|
+
dec eax
|
|
1967
|
+
jne vRUrO
|
|
1968
|
+
pop eax
|
|
1969
|
+
|
|
1970
|
+
push edx
|
|
1971
|
+
mov cl, bl
|
|
1972
|
+
rol word ptr [esp], cl
|
|
1973
|
+
pop edx
|
|
1974
|
+
neg edx
|
|
1975
|
+
|
|
1976
|
+
push eax
|
|
1977
|
+
mov eax, 4
|
|
1978
|
+
ixfpU:
|
|
1979
|
+
|
|
1980
|
+
push eax
|
|
1981
|
+
mov eax, 4
|
|
1982
|
+
EzpCK:
|
|
1983
|
+
|
|
1984
|
+
push eax
|
|
1985
|
+
mov eax, 4
|
|
1986
|
+
LMBqn:
|
|
1987
|
+
sub edx, ebx
|
|
1988
|
+
push eax
|
|
1989
|
+
movzx eax, dx
|
|
1990
|
+
shl eax, 14
|
|
1991
|
+
and ax, 0xFFFF
|
|
1992
|
+
xor dx, ax
|
|
1993
|
+
pop eax
|
|
1994
|
+
not edx
|
|
1995
|
+
dec eax
|
|
1996
|
+
jne LMBqn
|
|
1997
|
+
pop eax
|
|
1998
|
+
|
|
1999
|
+
xor edx, 0140Bh
|
|
2000
|
+
dec eax
|
|
2001
|
+
jne EzpCK
|
|
2002
|
+
pop eax
|
|
2003
|
+
|
|
2004
|
+
dec eax
|
|
2005
|
+
jne ixfpU
|
|
2006
|
+
pop eax
|
|
2007
|
+
|
|
2008
|
+
inc edx
|
|
2009
|
+
mov word ptr [ecx + ebx], dx
|
|
2010
|
+
inc ebx
|
|
2011
|
+
dec eax
|
|
2012
|
+
jne @b
|
|
2013
|
+
|
|
2014
|
+
push 0
|
|
2015
|
+
push ecx
|
|
2016
|
+
push ecx
|
|
2017
|
+
push 0
|
|
2018
|
+
call MessageBoxW
|
|
2019
|
+
```
|
|
2020
|
+
|
|
2021
|
+
### FASM Assembler 32 bit (ANSI example)
|
|
2022
|
+
|
|
2023
|
+
```asm
|
|
2024
|
+
; encrypted with https://www.stringencrypt.com (v1.5.0) [FASM Assembler (32 bit)]
|
|
2025
|
+
|
|
2026
|
+
; szFasm = "Hi Tomek Grysztar :)"
|
|
2027
|
+
local szFasm[21]:BYTE
|
|
2028
|
+
|
|
2029
|
+
lea edx, [szFasm]
|
|
2030
|
+
|
|
2031
|
+
mov byte [edx + 17], 0B7h
|
|
2032
|
+
mov byte [edx + 8], 0BBh
|
|
2033
|
+
mov byte [edx + 1], 002h
|
|
2034
|
+
mov byte [edx + 18], 013h
|
|
2035
|
+
mov byte [edx + 6], 0B5h
|
|
2036
|
+
mov byte [edx + 11], 023h
|
|
2037
|
+
mov byte [edx + 20], 067h
|
|
2038
|
+
mov byte [edx + 13], 02Dh
|
|
2039
|
+
mov byte [edx + 4], 00Ch
|
|
2040
|
+
mov byte [edx + 15], 0BDh
|
|
2041
|
+
mov byte [edx + 7], 074h
|
|
2042
|
+
mov byte [edx + 19], 035h
|
|
2043
|
+
mov byte [edx + 0], 04Eh
|
|
2044
|
+
mov byte [edx + 9], 0CEh
|
|
2045
|
+
mov byte [edx + 12], 036h
|
|
2046
|
+
mov byte [edx + 5], 09Ah
|
|
2047
|
+
mov byte [edx + 16], 09Dh
|
|
2048
|
+
mov byte [edx + 3], 0FCh
|
|
2049
|
+
mov byte [edx + 2], 026h
|
|
2050
|
+
mov byte [edx + 10], 08Dh
|
|
2051
|
+
mov byte [edx + 14], 09Fh
|
|
2052
|
+
|
|
2053
|
+
mov ecx, 21
|
|
2054
|
+
sub ebx, ebx
|
|
2055
|
+
|
|
2056
|
+
@@:
|
|
2057
|
+
mov al, byte [edx + ebx]
|
|
2058
|
+
dec eax
|
|
2059
|
+
push eax
|
|
2060
|
+
mov cl, bl
|
|
2061
|
+
ror byte [esp], cl
|
|
2062
|
+
pop eax
|
|
2063
|
+
sub eax, 06Fh
|
|
2064
|
+
not eax
|
|
2065
|
+
rol al, 4
|
|
2066
|
+
inc eax
|
|
2067
|
+
not eax
|
|
2068
|
+
push ecx
|
|
2069
|
+
movzx ecx, al
|
|
2070
|
+
shl ecx, 6
|
|
2071
|
+
and cl, 0xFF
|
|
2072
|
+
xor al, cl
|
|
2073
|
+
pop ecx
|
|
2074
|
+
sub eax, 04Ch
|
|
2075
|
+
dec eax
|
|
2076
|
+
add eax, 040h
|
|
2077
|
+
|
|
2078
|
+
push ecx
|
|
2079
|
+
mov ecx, 3
|
|
2080
|
+
gqOvB:
|
|
2081
|
+
rol al, 4
|
|
2082
|
+
sub eax, ebx
|
|
2083
|
+
dec ecx
|
|
2084
|
+
jne gqOvB
|
|
2085
|
+
pop ecx
|
|
2086
|
+
|
|
2087
|
+
sub eax, 0B5h
|
|
2088
|
+
|
|
2089
|
+
push ecx
|
|
2090
|
+
mov ecx, 2
|
|
2091
|
+
PxTWp:
|
|
2092
|
+
|
|
2093
|
+
push ecx
|
|
2094
|
+
mov ecx, 3
|
|
2095
|
+
ZRKAu:
|
|
2096
|
+
not eax
|
|
2097
|
+
dec ecx
|
|
2098
|
+
jne ZRKAu
|
|
2099
|
+
pop ecx
|
|
2100
|
+
|
|
2101
|
+
sub eax, 007h
|
|
2102
|
+
|
|
2103
|
+
push ecx
|
|
2104
|
+
mov ecx, 2
|
|
2105
|
+
mrsaT:
|
|
2106
|
+
push ecx
|
|
2107
|
+
movzx ecx, al
|
|
2108
|
+
shl ecx, 4
|
|
2109
|
+
and cl, 0xFF
|
|
2110
|
+
xor al, cl
|
|
2111
|
+
pop ecx
|
|
2112
|
+
|
|
2113
|
+
push ecx
|
|
2114
|
+
mov ecx, 4
|
|
2115
|
+
fXqJc:
|
|
2116
|
+
push ecx
|
|
2117
|
+
movzx ecx, al
|
|
2118
|
+
shr ecx, 7
|
|
2119
|
+
xor al, cl
|
|
2120
|
+
pop ecx
|
|
2121
|
+
dec ecx
|
|
2122
|
+
jne fXqJc
|
|
2123
|
+
pop ecx
|
|
2124
|
+
|
|
2125
|
+
dec ecx
|
|
2126
|
+
jne mrsaT
|
|
2127
|
+
pop ecx
|
|
2128
|
+
|
|
2129
|
+
dec ecx
|
|
2130
|
+
jne PxTWp
|
|
2131
|
+
pop ecx
|
|
2132
|
+
|
|
2133
|
+
|
|
2134
|
+
push ecx
|
|
2135
|
+
mov ecx, 2
|
|
2136
|
+
SDvsl:
|
|
2137
|
+
xor eax, 097h
|
|
2138
|
+
dec ecx
|
|
2139
|
+
jne SDvsl
|
|
2140
|
+
pop ecx
|
|
2141
|
+
|
|
2142
|
+
mov byte [edx + ebx], al
|
|
2143
|
+
inc ebx
|
|
2144
|
+
dec ecx
|
|
2145
|
+
jne @b
|
|
2146
|
+
|
|
2147
|
+
push 0
|
|
2148
|
+
push edx
|
|
2149
|
+
push edx
|
|
2150
|
+
push 0
|
|
2151
|
+
call [MessageBoxA]
|
|
2152
|
+
```
|
|
2153
|
+
|
|
2154
|
+
### NASM Assembler 32 bit encryption (ANSI example)
|
|
2155
|
+
|
|
2156
|
+
```nasm
|
|
2157
|
+
; encrypted with https://www.stringencrypt.com (v1.5.0) [NASM Assembler (32 bit, template)]
|
|
2158
|
+
|
|
2159
|
+
; szNasm = "NASM 32-bit demo"
|
|
2160
|
+
; NASM: reserve buffer on stack or BSS (FASM 'local' not available)
|
|
2161
|
+
; szNasm x 17 BYTE
|
|
2162
|
+
|
|
2163
|
+
lea ecx, [szNasm]
|
|
2164
|
+
|
|
2165
|
+
mov byte [ecx + 8], 0xD2
|
|
2166
|
+
mov byte [ecx + 14], 0x10
|
|
2167
|
+
mov byte [ecx + 4], 0x89
|
|
2168
|
+
mov byte [ecx + 9], 0x42
|
|
2169
|
+
mov byte [ecx + 1], 0xDF
|
|
2170
|
+
mov byte [ecx + 12], 0x6E
|
|
2171
|
+
mov byte [ecx + 15], 0xED
|
|
2172
|
+
mov byte [ecx + 10], 0xEF
|
|
2173
|
+
mov byte [ecx + 13], 0x9B
|
|
2174
|
+
mov byte [ecx + 6], 0x93
|
|
2175
|
+
mov byte [ecx + 0], 0x0E
|
|
2176
|
+
mov byte [ecx + 16], 0x97
|
|
2177
|
+
mov byte [ecx + 5], 0x04
|
|
2178
|
+
mov byte [ecx + 11], 0xE0
|
|
2179
|
+
mov byte [ecx + 3], 0x88
|
|
2180
|
+
mov byte [ecx + 2], 0xAE
|
|
2181
|
+
mov byte [ecx + 7], 0x00
|
|
2182
|
+
|
|
2183
|
+
mov ebx, 17
|
|
2184
|
+
and eax, 0
|
|
2185
|
+
|
|
2186
|
+
Jtcmn:
|
|
2187
|
+
mov dl, byte [ecx + eax]
|
|
2188
|
+
|
|
2189
|
+
push ebx
|
|
2190
|
+
mov ebx, 3
|
|
2191
|
+
kQyhD:
|
|
2192
|
+
push ebx
|
|
2193
|
+
movzx ebx, dl
|
|
2194
|
+
shr ebx, 7
|
|
2195
|
+
xor dl, bl
|
|
2196
|
+
pop ebx
|
|
2197
|
+
dec ebx
|
|
2198
|
+
jne kQyhD
|
|
2199
|
+
pop ebx
|
|
2200
|
+
|
|
2201
|
+
xor edx, 0x59
|
|
2202
|
+
xor edx, eax
|
|
2203
|
+
push ebx
|
|
2204
|
+
movzx ebx, dl
|
|
2205
|
+
shr ebx, 6
|
|
2206
|
+
xor dl, bl
|
|
2207
|
+
pop ebx
|
|
2208
|
+
|
|
2209
|
+
push ebx
|
|
2210
|
+
mov ebx, 3
|
|
2211
|
+
QvoTY:
|
|
2212
|
+
sub edx, 0x0A
|
|
2213
|
+
dec ebx
|
|
2214
|
+
jne QvoTY
|
|
2215
|
+
pop ebx
|
|
2216
|
+
|
|
2217
|
+
|
|
2218
|
+
push ebx
|
|
2219
|
+
mov ebx, 2
|
|
2220
|
+
oWCAQ:
|
|
2221
|
+
|
|
2222
|
+
push ebx
|
|
2223
|
+
mov ebx, 4
|
|
2224
|
+
STBPV:
|
|
2225
|
+
|
|
2226
|
+
push ebx
|
|
2227
|
+
mov ebx, 3
|
|
2228
|
+
fPAhz:
|
|
2229
|
+
push ebx
|
|
2230
|
+
movzx ebx, dl
|
|
2231
|
+
shr ebx, 7
|
|
2232
|
+
xor dl, bl
|
|
2233
|
+
pop ebx
|
|
2234
|
+
rol dl, 4
|
|
2235
|
+
sub edx, 0xC1
|
|
2236
|
+
dec ebx
|
|
2237
|
+
jne fPAhz
|
|
2238
|
+
pop ebx
|
|
2239
|
+
|
|
2240
|
+
|
|
2241
|
+
push ebx
|
|
2242
|
+
mov ebx, 3
|
|
2243
|
+
Vhgax:
|
|
2244
|
+
add edx, eax
|
|
2245
|
+
rol dl, 4
|
|
2246
|
+
add edx, eax
|
|
2247
|
+
dec ebx
|
|
2248
|
+
jne Vhgax
|
|
2249
|
+
pop ebx
|
|
2250
|
+
|
|
2251
|
+
dec ebx
|
|
2252
|
+
jne STBPV
|
|
2253
|
+
pop ebx
|
|
2254
|
+
|
|
2255
|
+
dec ebx
|
|
2256
|
+
jne oWCAQ
|
|
2257
|
+
pop ebx
|
|
2258
|
+
|
|
2259
|
+
mov byte [ecx + eax], dl
|
|
2260
|
+
inc eax
|
|
2261
|
+
dec ebx
|
|
2262
|
+
jne Jtcmn
|
|
2263
|
+
|
|
2264
|
+
push 0
|
|
2265
|
+
push ecx
|
|
2266
|
+
push ecx
|
|
2267
|
+
push 0
|
|
2268
|
+
call [MessageBoxA]
|
|
2269
|
+
```
|
|
2270
|
+
|
|
2271
|
+
## Free demo version limitations
|
|
2272
|
+
|
|
2273
|
+
The free demo version comes with some **limitations**.
|
|
2274
|
+
|
|
2275
|
+
| Feature | Demo version | Full version |
|
|
2276
|
+
|---------------------------------------|:----------------:|-------------:|
|
|
2277
|
+
| String encryption | ✅ | ✅ |
|
|
2278
|
+
| File encryption (text or binary file) | ❌ | ✅ |
|
|
2279
|
+
| Nested polymorphic loops | ❌ | ✅ |
|
|
2280
|
+
| Max. label length (characters) | `10` | `64` |
|
|
2281
|
+
| Max. string length (characters) | `10` | `4096` |
|
|
2282
|
+
| Max. file length (bytes) | — | `4 MB` |
|
|
2283
|
+
| Min. number of encryption commands | `3` | `50` |
|
|
2284
|
+
| Max. number of encryption commands | `3` | `50` |
|
|
2285
|
+
|
|
2286
|
+
## Pricing
|
|
2287
|
+
|
|
2288
|
+
To remove the limitations and support our project and its development, you need to buy an activation code at:
|
|
2289
|
+
|
|
2290
|
+
https://www.stringencrypt.com/buy/
|
|
2291
|
+
|
|
2292
|
+
Each activation code has an assigned number of **usage credits**. You can use the software in full version as many times as you have usage credits on your account balance.
|
|
2293
|
+
|
|
2294
|
+
## How to get a free activation code?
|
|
2295
|
+
|
|
2296
|
+
You can get a **free activation code** (500 usage credits) if you can advertise StringEncrypt service with a link to the project site https://www.stringencrypt.com/ at:
|
|
2297
|
+
|
|
2298
|
+
* Programming sites & forums
|
|
2299
|
+
* Programming blogs
|
|
2300
|
+
* Technical articles
|
|
2301
|
+
* X or any other social media site
|
|
2302
|
+
* ...or any other website related to programming and development
|
|
2303
|
+
|
|
2304
|
+
Send me all the details at my [contact address](https://www.stringencrypt.com/) and if it's legit - **bam!**, you got yourself a free code :)
|
|
2305
|
+
|
|
2306
|
+
## Changelog
|
|
2307
|
+
|
|
2308
|
+
### 2026-04-14
|
|
2309
|
+
|
|
2310
|
+
Encryption engine updated to v1.5.0 with major algorithmic improvements.
|
|
2311
|
+
|
|
2312
|
+
Support for new programming languages added:
|
|
2313
|
+
|
|
2314
|
+
* Kotlin
|
|
2315
|
+
* Dart
|
|
2316
|
+
* Go
|
|
2317
|
+
* Rust
|
|
2318
|
+
* Swift
|
|
2319
|
+
* Lua
|
|
2320
|
+
* PHP
|
|
2321
|
+
* Objective-C
|
|
2322
|
+
* NASM
|
|
2323
|
+
|
|
2324
|
+
#### Nested polymorphic encryption loops (matryoshka-style)
|
|
2325
|
+
|
|
2326
|
+
Available only for paying customers. The decryption loop can now contain randomly generated inner loops (up to 3 levels deep), each with 1–3 encryption commands. This dramatically increases the complexity of the generated polymorphic code, making static analysis significantly harder. Supported in all languages except Haskell. Assembly languages (MASM/FASM/NASM) use push/pop with randomly generated named labels for inner loop nesting.
|
|
2327
|
+
|
|
2328
|
+
Related to the nested loops, the C/C++ loop constructs are now using volatile keyword to prevent compiler loop unrolling, and it makes advanced string extraction tools unusable.
|
|
2329
|
+
|
|
2330
|
+
#### Bugfixes
|
|
2331
|
+
|
|
2332
|
+
* Fixed Python formatting to be compatible with PEP rules.
|
|
2333
|
+
* Fixed Ruby generator by using valid method of storing encrypted unicode characters array.
|
|
2334
|
+
* Fixed AutoIt generator.
|
|
2335
|
+
|
|
2336
|
+
#### 6 new encryption VM instructions:
|
|
2337
|
+
|
|
2338
|
+
* neg — two's complement negation (self-inverse)
|
|
2339
|
+
* swap — nibble swap for 8-bit / byte swap for 16-bit values (self-inverse)
|
|
2340
|
+
* c_rol / c_ror — counter-dependent bit rotation, shift amount varies per character making frequency analysis nearly impossible
|
|
2341
|
+
* xor_shr / xor_shl — hash-like self-XOR mixing functions inspired by algorithms such as MurmurHash and SplitMix (self-inverse)
|
|
2342
|
+
|
|
2343
|
+
The total number of encryption VM instructions is now 17 (up from 11), providing a vastly larger space of possible encryption combinations.
|
|
2344
|
+
|
|
2345
|
+
#### New syntax highlighting
|
|
2346
|
+
|
|
2347
|
+
Legacy Syntax Highlighter library was replaced with modern Prism highlighter.
|
|
2348
|
+
|
|
2349
|
+
#### SDKs
|
|
2350
|
+
|
|
2351
|
+
* Official StringEncrypt PHP package published on Packagist
|
|
2352
|
+
* StringEncrypt Python package on PyPi upgraded
|
|
2353
|
+
|
|
2354
|
+
# Fin
|
|
2355
|
+
|
|
2356
|
+
I hope you like it and you will try it at least :)
|
|
2357
|
+
|
|
2358
|
+
Bartosz Wójcik
|
|
2359
|
+
|
|
2360
|
+
* Visit my site at — https://www.pelock.com
|
|
2361
|
+
* X — https://x.com/PELock
|
|
2362
|
+
* GitHub — https://github.com/PELock
|