рдореИрдВрдиреЗ рдЖрдЬ awscli рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.6.6 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд┐рд▓реЛрдореАрдЯрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкрд░ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд▓рдЧрд╛ред рдпрд╣ 1.6.5 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
$> aws --version
aws-cli/1.6.6 Python/2.7.6 Darwin/13.4.0
$> python -V
Python 2.7.6
$> aws kms encrypt --key-id REDACTED --plaintext foo
{
"KeyId": "arn:aws:kms:us-east-1:REDACTED:key/REDACTED",
"CiphertextBlob": "CiDdiD7jljnCzXlfZUp27Y4LDY+QJa2Zqcw/7+ihfBDo7hKKAQEBAgB43Yg+45Y5ws15X2VKdu2OCw2PkCWtmanMP+/ooXwQ6O4AAABhMF8GCSqGSIb3DQEHBqBSMFACAQAwSwYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAwVt2CzbGDR2nUwszQCARCAHgdJ4aHQ4i7TMzBN6XlKcC73oilECgep+basamtnXQ=="
}
$> aws kms decrypt --ciphertext-blob CiDdiD7jljnCzXlfZUp27Y4LDY+QJa2Zqcw/7+ihfBDo7hKKAQEBAgB43Yg+45Y5ws15X2VKdu2OCw2PkCWtmanMP+/ooXwQ6O4AAABhMF8GCSqGSIb3DQEHBqBSMFACAQAwSwYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAwVt2CzbGDR2nUwszQCARCAHgdJ4aHQ4i7TMzBN6XlKcC73oilECgep+basamtnXQ==
A client error (InvalidCiphertextException) occurred when calling the Decrypt operation: None
$> pip freeze
Babel==1.3
Fabric==1.10.0
Jinja2==2.7.3
MarkupSafe==0.23
Pillow==2.6.1
PyChef==0.2.3
PyYAML==3.11
Pygments==2.0.1
Sphinx==1.2.3
argparse==1.2.1
astroid==1.2.1
awscli==1.6.6
bcdoc==0.12.2
binaryornot==0.3.0
boto==2.34.0
botocore==0.77.0
box.py==1.2.8
cffi==0.8.6
cliff==1.8.0
cmd2==0.6.7
colorama==0.2.5
cookiecutter==0.8.0
coverage==3.7.1
cryptography==0.6.1
decorator==3.4.0
docutils==0.12
dogapi==1.8.5
ecdsa==0.11
futures==2.2.0
httplib2==0.9
httpretty==0.8.3
iso8601==0.1.10
jmespath==0.5.0
jsonpatch==1.9
jsonpointer==1.5
jsonschema==2.4.0
kazoo==2.0
keyring==4.0
logilab-common==0.63.0
lxml==3.4.0
mock==1.0.1
mockito==0.5.2
netaddr==0.7.12
nose==1.3.4
numpy==1.9.1
oath==1.2
oslo.config==1.4.0
oslo.i18n==1.0.0
oslo.serialization==1.0.0
oslo.utils==1.0.0
paramiko==1.15.1
pbr==0.10.0
prettytable==0.7.2
pyOpenSSL==0.14
pyasn1==0.1.7
pycparser==2.10
pycrypto==2.6.1
pylint==1.3.1
pyparsing==2.0.3
python-ceilometerclient==1.0.12
python-cinderclient==1.1.1
python-dateutil==2.3
python-glanceclient==0.14.2
python-heatclient==0.2.12
python-keystoneclient==0.11.2
python-neutronclient==2.3.9
python-novaclient==2.20.0
python-openstackclient==0.4.1
python-swiftclient==2.3.1
python-troveclient==1.0.7
pytz==2014.9
qrcode==5.1
requests==2.4.3
rsa==3.1.2
scipy==0.14.0
simplejson==3.6.5
six==1.8.0
stevedore==1.1.0
urllib3==1.9.1
virtualenv==1.11.6
warlock==1.1.0
wsgiref==0.1.2
рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╕ рдереЛрдбрд╝реА рд╕реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА:
1.6.6 рдореЗрдВ , рд╣рдордиреЗ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рддрдп рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдмреЗрд╕64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ "рдмреНрд▓реЙрдм" рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкрд╣рд▓реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рдереЗред рдирддреАрдЬрддрди, рдЕрдм рдЖрдкрдХреЛ "рдмреНрд▓реЙрдм" рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдб рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдк рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдмреЗрд╕ 64 рдХреЛ рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
$ aws kms encrypt --key-id <key-id> --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file
$ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"
Decrypted: abcd
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ fileb://
рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЗрдирд░реА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╣реИред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреИрд╕рд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЗрд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдВрдХ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ 1.6.5 рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛ рдЬреЛ рдХрд┐ 1.6.6 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рд╕реНрдирд┐рдкреЗрдЯ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕реАрдПрд▓рдЖрдИ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдЗрдирдкреБрдЯ/рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╣рд╛рд▓рд┐рдпрд╛ рд░рд┐рдЧреНрд░реЗрд╢рди рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рд╣реА рд░рд╣рд╛ рд╣реИред
рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдЕрд╕рд▓ рдореЗрдВ, рдЕрдм рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ #1001 рдХреЗ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ
$> aws kms encrypt --key-id $KMS_KEY_ID --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file
$> echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"
'ascii' codec can't decode byte 0xdd in position 2: ordinal not in range(128)
Decrypted:
@mtougeron рдЖрдк AWS CLI рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд╕реАрдПрд▓рдЖрдИ (1.6.8) рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ:
~ $ aws kms encrypt --key-id $AWS_KEY_ID --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file
~ $ hexdump -C /tmp/encrypted-file
00000000 0a 20 e1 68 92 dc 42 40 fe 07 80 ca f6 54 1c 68 |. [email protected]|
00000010 e2 45 80 bb c3 e0 2a 2f 91 50 7c ac c3 02 9b c9 |.E....*/.P|.....|
00000020 a8 b3 12 8b 01 01 01 02 00 78 e1 68 92 dc 42 40 |.........x.h..B@|
00000030 fe 07 80 ca f6 54 1c 68 e2 45 80 bb c3 e0 2a 2f |.....T.h.E....*/|
00000040 91 50 7c ac c3 02 9b c9 a8 b3 00 00 00 62 30 60 |.P|..........b0`|
00000050 06 09 2a 86 48 86 f7 0d 01 07 06 a0 53 30 51 02 |..*.H.......S0Q.|
00000060 01 00 30 4c 06 09 2a 86 48 86 f7 0d 01 07 01 30 |..0L..*.H......0|
00000070 1e 06 09 60 86 48 01 65 03 04 01 2e 30 11 04 0c |...`.H.e....0...|
00000080 41 de f2 2a a6 c5 38 ef 8a 52 54 92 02 01 10 80 |A..*..8..RT.....|
00000090 1f 2e 01 90 65 7a 21 8c dd 05 e4 4d 09 64 85 c4 |....ez!....M.d..|
000000a0 33 e3 3d e9 ce 33 6b e9 00 93 ec e5 54 33 8b 3b |3.=..3k.....T3.;|
000000b0
~ $ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)"
Decrypted: abcd
~ $ aws --version
aws-cli/1.6.8 Python/2.7.7 Darwin/13.4.0
@jamesls рдпрд╣ рдЕрдм 1.6.8 рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж
@jamesls рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм UI рд╣реИред рдЙрд╕реА рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдорд┐рд▓рд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдореМрдЬреВрджрд╛ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рддреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдВред
A client error (InvalidCiphertextException) occurred when calling the Decrypt operation: None
рджреВрд░ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рднреА рдирд╣реАрдВ рдмрддрд╛рддрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рд┐рдлрд░ рд╢рд╛рдпрдж рдмреЗрд╕ 64 рд╣реИ рдФрд░ рдПрдХ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпреВрдЖрд░рдПрд▓ рдпрд╛ рдХреБрдЫ рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╛ рдмрд┐рд▓реНрд▓реА "рдЗрд╕реЗ рдкрд╣рд▓реЗ рдмреЗрд╕ 64 рд╕реЗ рдбреАрдХреЛрдб рдХрд░реЗрдВ" рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП decrypt
рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдзреНрд╡рдЬ рдХреНрдпреЛрдВ рди рджреЗрдВ?
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдЖрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _рдмрд┐рдирд╛ рд╕рд┐рдлрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
aws kms decrypt --ciphertext-blob fileb://<(echo 'ciphertext' | base64 -d)
рдиреЛрдЯ: рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ @hauntingEcho рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, <(cmd)
POSIX- рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк sh
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди bash
рдФрд░ zsh
рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдкреБрди: @thegranddesign рдХреА рдЯрд┐рдкреНрдкрдгреА , рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ base64
рд▓рд┐рдП рдкреВрдВрдЬреА 'рдбреА' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЬреИрд╕реЗ:
$ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb://<(echo $ENCRYPTED_DATA | base64 -D) --query Plaintext --output text | base64 -D)"
Decrypted: Hello world!
(рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ Decrypted
рд▓рд╛рдЗрди рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдХреНрдпреЛрдВ рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ)ред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛
#encrypt the password: TestReadWrite text in the test.txt file
aws kms encrypt --key-id cfc7acf7-4f20-49c3-aa11-8be4cdc3291d --plaintext fileb://test.txt --output text | base64 --decode > out.txt
#decrypt the password: TestReadWrite
aws kms decrypt --ciphertext-blob fileb://out.txt --output text --query Plaintext | base64 --decode
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдереА, рд▓реЗрдХрд┐рди рдиреЛрдб рдиреЗ рдорджрдж рдХреА:
'use strict';
const KMS = require('aws-sdk').KMS;
const fs = require('fs');
const kms = new KMS({
apiVersion: '2014-11-01',
// region: 'eu-west-1'
});
function encrypt(params) {
return kms.encrypt(params).promise();
}
const arn = 'arn:aws:kms:xxx';
encrypt({
KeyId: arn,
Plaintext: fs.readFileSync('/path/to/key.pem')
})
.then(data => fs.writeFileSync('/path/to/key.json', JSON.stringify(data)));
@thegranddesign рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдПрдХ рдФрд░ рдиреЛрдЯ - <(cmd)
рдПрдХ рдмреИрд╢рд┐рдЬреНрдо рд╣реИ, POSIX рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдмреИрд╢ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдпрд╣ рдПрдХ рджрд┐рдорд╛рдЧреА рджрдмрджрдмрд╛ рдЧреВрдВрдЧрд╛ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдм рддрдХ рдЦреБрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рди рд╣реЛ рдЬрд╛рдПред рдпрд╣ рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рдПрдХ рд╕рдордорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ (рдФрд░ рдЕрд╕рдВрдЧрдд) рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рдордорд┐рдд рдЙрдкрдХрд░рдг рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ BROKEN рд╣реИред рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЙрдкрдХрд░рдг рдХреЛ рдпрд╛ рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╣ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдЗрдирдкреБрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдпрд╛ рдлрд┐рд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбреЗрдб рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ рдмреЗрд╕ 64 рдбреАрдХреЛрдб рдЪрд░рдгреЛрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдирд╣реАрдВ рдереЗ рдЙрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдпрд╛ рдПрдХ рдПрдВрдЯреА-рдкреИрд░рд╛ рдпрджрд┐ рд╡рд╣ рдЙрд╕реА рд╕рдЯреАрдХ рдкрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдмреЗрддреБрдХрд╛ рд╕реЗ рдкрд░реЗ рд╣реИ рдХрд┐ рдореИрдВ рдЙрди рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбреЗрдб рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреЗрд▓реЛрдб рдХреЗ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбреЗрдб рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд┐рд▓реЛрдореАрдЯрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрд╕ 64 рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдпрд╣ рд╡рд╛рдкрд╕ рдЙрд╕ рдлреЙрд░реНрдо рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдХрдорд╛рдВрдб рдХреЗ рд╕реНрддрд░ рдкрд░ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЪреАрдЬ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ - рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ - рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдХрд░рдг рдПрдХ рдЯреВрдЯрд╛ рд╣реБрдЖ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рд╣реИ рдЬрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рджреЛ рдЙрдк-рдЖрджреЗрд╢ рд╕рдордорд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рд░рд╛рд╕реНрддрд╛ (рдирдП рдЭрдВрдбреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреИрд╕рд╛ рдХрд┐ @thegranddesign рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ /
рд╡реИрдз рдмреЗрд╕ 64 рд╡рд░реНрдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬреЗрд╕рди рдореЗрдВ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╡реИрдз рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП:
/
, рддреЛ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред fileb://
рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрд░рддреЗ рд╣реБрдП, file://
рдХреЛ b64-рдПрдиреНрдХреЛрдбреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╣рд╛рд▓рд╛рдВрдХрд┐ @ sgendler-stem рд╕реЗ рд╕рд╣рдордд - рдпрд╣ рдЯрд┐рдХрдЯ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХреА рдЧрдИ рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕ рдкрд░ KMS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреЛрд░реНрдб рдкрд░ рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдПрдХ рджрд┐рдорд╛рдЧреА рджрдмрджрдмрд╛ рдЧреВрдВрдЧрд╛ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрдм рддрдХ рдЦреБрд▓рд╛ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рди рд╣реЛ рдЬрд╛рдПред рдпрд╣ рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рд╣реИ рдЬреЛ рдПрдХ рд╕рдордорд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ (рдФрд░ рдЕрд╕рдВрдЧрдд) рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╕рдордорд┐рдд рдЙрдкрдХрд░рдг рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ BROKEN рд╣реИред рдореБрдЭреЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЙрдкрдХрд░рдг рдХреЛ рдпрд╛ рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдпрд╣ рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдЗрдирдкреБрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИ, рдпрд╛ рдлрд┐рд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбреЗрдб рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ рдмреЗрд╕ 64 рдбреАрдХреЛрдб рдЪрд░рдгреЛрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдкреИрд░рд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдирд╣реАрдВ рдереЗ рдЙрд╕ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдпрд╛ рдПрдХ рдПрдВрдЯреА-рдкреИрд░рд╛ рдпрджрд┐ рд╡рд╣ рдЙрд╕реА рд╕рдЯреАрдХ рдкрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдмреЗрддреБрдХрд╛ рд╕реЗ рдкрд░реЗ рд╣реИ рдХрд┐ рдореИрдВ рдЙрди рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбреЗрдб рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреЗрд▓реЛрдб рдХреЗ рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдбреЗрдб рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд┐рд▓реЛрдореАрдЯрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореБрдЭреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрд╕ 64 рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдпрд╣ рд╡рд╛рдкрд╕ рдЙрд╕ рдлреЙрд░реНрдо рдореЗрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкреИрд░рд╛рдореНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдХрдорд╛рдВрдб рдХреЗ рд╕реНрддрд░ рдкрд░ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди/рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЪреАрдЬ рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ - рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░рдо рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ - рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдХрд░рдг рдПрдХ рдЯреВрдЯрд╛ рд╣реБрдЖ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рд╣реИ рдЬрд╣рд╛рдВ рдЖрдЙрдЯрдкреБрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рджреЛ рдЙрдк-рдЖрджреЗрд╢ рд╕рдордорд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдпрд╛ рдбреЗрд╡рд▓рдкрд░ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИред
рдореБрдЭреЗ @ sgendler-stem рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ - рдпрджрд┐ рдХреЛрдб рдЖрдЙрдЯрдкреБрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рддреЛ рдХрдо рд╕реЗ рдХрдо , рдЗрд╕реЗ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рдпрджрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд╕рдбреАрдХреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдЕрдЬреАрдм arn
рдЬреЛрдбрд╝рдХрд░, рд╕реАрдПрд▓рдЖрдИ рдЧреИрд░-рдмреЗрд╕ 64 arn
рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпреВрдЖрд░рдПрд▓. рдпрд╣ рдЕрднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИ ред
рдлрд┐рд░ рд╕реЗ рд╕рд╣рдорддред рдЗрд╕рдиреЗ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдВрдж рд╣реИ? рдХреНрдпреЛрдВ? рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦреЛрд▓реЗ рд╣реБрдП 4 рд╕рд╛рд▓ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реА рдХрд┐рд╕реА рдХреЛ "рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ" рдХрд╣ рд░рд╣реА рд╣реИред рдирд╣реАрдВ, рдпрд╣ рдХрдордмрдЦреНрдд рдирд╣реАрдВ рд╣реИ; @ sgendler-stem рдирд┐рд╢рд╛рдиреЗ рдкрд░ рд╕рд╣реА рд╣реИ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рдЯреВрдЯрд╛ рд╣реБрдЖ рд╣реИред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдЯреАрдо рдХреЛ рдЕрдкрдиреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрд░рд╛ рд▓рдЧреЗрдЧрд╛ред
рд╕рдорд╛рди рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВ:
botocore.errorfactory.InvalidCiphertextException: рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ (InvalidCiphertextException):
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛:
рдХреБрдВрдЬреА = b64decode (рдХреБрдВрдЬреА)
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ = рдХреНрд▓рд╛рдЗрдВрдЯред рдбрд┐рдХреНрд░рд┐рдкреНрдЯ (
рд╕рд┐рдлрд░рдЯреЗрдХреНрд╕реНрдЯрдмреНрд▓реЙрдм=рдХреБрдВрдЬреА
)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛ рд╣реЛрддреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ encrypt
, generate-data-key
, рдЖрджрд┐ рдХреНрд╖реЗрддреНрд░ рдлреЛрди рдирд╣реАрдВ рдХрд┐рдпрд╛ CiphertextBlob
ред рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдЬрдм decrypt
рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ --ciphertext-blob
, рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд┐рдлрд░ рдмреНрд▓реЙрдм рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдЕрд▓рдЧ рдврдВрдЧ рд╕реЗ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ unintuitive рд╣реИред
рдпрджрд┐ рдзреНрд╡рдЬ рдХрд╛ decrypt
рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рдерд╛, рддреЛ рдпрд╣ рдПрдХ рд╕рдВрдХреЗрдд рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреА рдПрдХ рдЕрд▓рдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИред
рдпрд╣рд╛рдБ рдкрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╕ 64-рдПрдиреНрдХреЛрдбреЗрдб рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ https://github.com/aws/aws-cli/issues/2063
@ojitha
рдХрд┐рдореА рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рд╕рдордп рдХреА-рдЖрдИрдбреА рдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
@ arpit728 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CipherTextBlob рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реАрдПрдордХреЗ рдХреЗ рдХреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣реИред
рдХреГрдкрдпрд╛ рдЗрд╕ рдЯрд┐рдХрдЯ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рддрдХ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ!
рдЗрд╕рдХреЗ рд╕рд╛рде рдХрдИ рдШрдВрдЯреЗ рддрдХ рдЦреЗрд▓реЗ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЯрд┐рдХрдЯ рдирд╣реАрдВ рдорд┐рд▓ рдЧрдпрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреАрдЪ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЛрдбрд┐рдд рдФрд░ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╕ рдереЛрдбрд╝реА рд╕реА рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА:
1.6.6 рдореЗрдВ , рд╣рдордиреЗ рдПрдХ рдкреНрд░рддрд┐рдЧрдорди рддрдп рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдмреЗрд╕64 рдПрдиреНрдХреЛрдбрд┐рдВрдЧ "рдмреНрд▓реЙрдм" рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдереЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкрд╣рд▓реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рдереЗред рдирддреАрдЬрддрди, рдЕрдм рдЖрдкрдХреЛ "рдмреНрд▓реЙрдм" рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдХрдЪреНрдЪреЗ рдмрд╛рдЗрдирд░реА рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдмреЗрд╕ 64 рдПрдиреНрдХреЛрдб рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд░рд╛рдЙрдВрдб рдЯреНрд░рд┐рдк рдХреБрдВрдЬреА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдмреЗрд╕ 64 рдХреЛ рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
$ aws kms encrypt --key-id <key-id> --plaintext "abcd" --query CiphertextBlob --output text | base64 -D > /tmp/encrypted-file $ echo "Decrypted: $(aws kms decrypt --ciphertext-blob fileb:///tmp/encrypted-file --query Plaintext --output text | base64 -D)" Decrypted: abcd
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ
fileb://
рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЗрдирд░реА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╣реИред
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ:
рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ (InvalidCiphertextException):
рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб:
`рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд┐рдореА рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ --рдХреА-рдЖрдИрдбреА рдЕрд░реНрди: рдПрдбрдмреНрд▓реНрдпреВрдПрд╕: рдХрд┐рдореА: рдИрдпреВ-рд╡реЗрд╕реНрдЯ-1werwerwjl: рдХреБрдВрдЬреА/xxxyyyy --plaintext "abcd" --query CiphertextBlob --рдЖрдЙрдЯрдкреБрдЯ рдЯреЗрдХреНрд╕реНрдЯ | рдмреЗрд╕ 64 -рдбреА> ./рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб-рдлрд╛рдЗрд▓
рдЗрдХреЛ "рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб: $(aws kms decrypt --ciphertext-blob fileb:./encrypted-file --query Plaintext --output text | base64 --decode)"
`
рдЙрдмрдВрдЯреВ рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рд╢ рдХреАред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рд╕реНрдкрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╛ рдЙрджрд╛рд╣рд░рдг (рдХрд┐рд╕реА рд╕рд╛рдЗрдЯ рдпрд╛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рд▓рд┐рдВрдХ) рдкрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛!
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕ рдЖрд▓реЗрдЦ рд╕реЗ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ: https://dev.to/matchilling/pragmatically-storing-security- рд╕рдВрд╡реЗрджрдирд╢реАрд▓-рдбреЗрдЯрд╛-рдЙрдкрдпреЛрдЧ-aws-kms-5e5b
рдПрдлрд╡рд╛рдИрдЖрдИ, рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдЖрддреЗ рд╣реИрдВ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП _рдмрд┐рдирд╛ рд╕рд┐рдлрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдиреЛрдЯ: рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ @hauntingEcho рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ,
<(cmd)
POSIX- рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкsh
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рдиbash
рдФрд░zsh
рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред