2016-12-01 11 views
0

私は本当にここで何か混乱しています。再エンコード時(base64)のbase64文字列のデコード値が異なる場合

FZ!?A,�U"WwwwwwwwwXHTransactional: Aaaaaaaa Gggggg ?XU恍[email protected] QD駴tps://www.abcdefgh.com/endpoint--name?id=62FYPW&valu=2ffg92080f22c50c6grsd349frtyuio9&utm_campaign=Transactional%3A%20Password%20Reset&utm_source=SparkPost&utm_medium=email&utm_term=Transactional%3A%20Pppp%20Mainn&referer=62FYPWGQ{"email_user":"14785243699632.288207406700815289974144","binding":"notifications"}

しかし、私はBASE64に戻って同じ出力値をエンコードしようとすると、それは私に与えます:私は、次のbase64文字列をデコードするとき

RgRaIY6KP0EIASwW7bCCVSJXCGJsYWhibGFoWAQAAAAASB1UcmFuc2FjdGlvbmFsOiBQYXNzd29yZCBSZXNldEIKAASKCT9YVegBjVITZXhhbXBsZTAxQGdtYWlsLmNvbQlRBAAAAABE6mh0dHBzOi8vd3d3LmV4YW1wbGUxLmNvbS9wYXNzd29yZC1yZXNldD9pZD02MkZZUFcmaGFzaD0yYmI0OTIwODBmMjJjNTZnNmNhYzAzNDlmNDNmNmRiYiZ1dG1fY2FtcGFpZ249VHJhbnNhY3Rpb25hbCUzQSUyMFBhc3N3b3JkJTIwUmVzZXQmdXRtX3NvdXJjZT1TcGFya1Bvc3QmdXRtX21lZGl1bT1lbWFpbCZ1dG1fdGVybT1UcmFuc2FjdGlvbmFsJTNBJTIwUGFzc3dvcmQlMjBSZXNldCZyZWZlcmVyPTYyRllQV0dReyJlbWFpbF91dWlkIjoiMTQ4MDUyNDU3ODQxMS4yODgyMDc0MDY3Nzc4OTUyODk5NTUzOTkiLCJiaW5kaW5nIjoibm90aWZpY2F0aW9ucyJ9 

出力がある

RgRaIY4/QQgBLBb9VSJXCHd3d3d3d3d3WARIHVRyYW5zYWN0aW9uYWw6IEFhYWFhYWFhIEdnZ2dnZwoEij9YVU1SE2V4YW1wbGUwMUBnbWFpbC5jb20JUQRE9HRwczovL3d3dy5hYmNkZWZnaC5jb20vZW5kcG9pbnQtLW5hbWU/aWQ9NjJGWVBXJnZhbHU9MmZmZzkyMDgwZjIyYzUwYzZncnNkMzQ5ZnJ0eXVpbzkmdXRtX2NhbXBhaWduPVRyYW5zYWN0aW9uYWwlM0ElMjBQYXNzd29yZCUyMFJlc2V0JnV0bV9zb3VyY2U9U3BhcmtQb3N0JnV0bV9tZWRpdW09ZW1haWwmdXRtX3Rlcm09VHJhbnNhY3Rpb25hbCUzQSUyMFBwcHAlMjBNYWlubiZyZWZlcmVyPTYyRllQV0dReyJlbWFpbF91c2VyIjoiMTQ3ODUyNDM2OTk2MzIuMjg4MjA3NDA2NzAwODE1Mjg5OTc0MTQ0IiwiYmluZGluZyI6Im5vdGlmaWNhdGlvbnMifQ== 

ここには何が起こっていますか?私はxまたはbase64_Bからbase64_Aを生成することができますどのように、

decode(base64_A)の場合は私にxを与えている、とencode(x)は私にbase64_Bを与えますか?

+0

=はパディングです。たとえば、元の文字列は仕様を満たすために渡されていません。終わりには、おそらくcrlf?エンコードされた決定された文字列をデコードすると、何が得られますか? –

+0

コード化された決定された文字列をデコードすると、最初のbase64文字列をデコードしたときのものと同じ、utm_source = SparkPost&utm_medium = email&utm_term =トランザクション%3A%20Password%20Reset&refとなります。 –

+0

最後にCRLFがないことを確認できます:) –

答えて

1

表示された復号テキストには、非ASCII文字が含まれています。 Base64はバイナリデータのみをエンコードするため、テキストのエンコード/デコード時に文字エンコードを考慮する必要があります。

base64をエンコードする場合、文字列をUTF-8などで最初にバイトにエンコードする必要があります。これらのバイトはbase64でエンコードできます。

base64をデコードすると結果はバイトになり、文字列にcharsetデコードできます。

誤った文字セットを使用すると、誤った結果が得られます。

関連する問題