phpで記号が入らない形式で暗号化する方法ってありますでしょうか。
base64でエンコード、デコードしようと思ったんですが/+=が入ってしまうので別の方法を考えています。
可逆性で数字英数字だけはセキュリティ的に弱いでしょうか
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
「暗号化」自体の処理は、PHPに組み込まれたOpenSSLなどで、適宜行って下さい。自分で暗号化アルゴリズムを作るのは、基本的にデメリットしかありません。
暗号化した後で、いちばんシンプルに「英数字だけ」の出力にしようと思えば、16進数にしたものをそのまま出力、という方法があります(長さはもとの2倍になります)。
投稿2017/02/02 05:50
編集2017/02/02 06:20総合スコア145183
0
暗号化は別途行うとして、暗号化後のバイナリ文字列を英数字にするなら、16進表現はどうでしょうか。
PHP
1$a = "zclk\1:.,\em;km\x80"; 2$b = unpack("H*",$a); 3 4var_dump($b);
unpack結果は配列になります。
投稿2017/02/02 06:01
総合スコア84505
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/07 13:44
0
エンコードという言葉が一般用語としては暗号化の意味合いを持つため、勘違いすることもあるかも知れません。しかし、計算機科学では多くの文脈で(?)暗号化とエンコードは違った意味合いで使われることが多いと思います。
上でいった暗号化(encription)とエンコード(encoding)は目的が違うのですが、その点が明らかになると他の回答者さんが答えておられる背景がよくわかると思います。
- 暗号化(encryption)
事実上第三者による盗聴・偽装が不可能なレベルを指すことが多いと思います。RSA公開鍵暗号法の例でいうと大きな数の素因数分解が理論的に困難(世界で一番頭がいい人が最高の計算機設備を使って生涯をかけても解けないと信じられている)という根拠で使われています。
- エンコード(encoding)
単にインターフェース上の都合で単純な可逆置換を行うものであって必ずしも暗号化として有効なものではありません。BASE64などだとよく知られたアルゴリズムなのである程度の知識をもった人なら誰でも簡単に一瞬で平文に戻せます。ですからセキュリティー上は「平文を流しているのとなんら変わらないレベル」と捉えるべきです。
もし質問者さんが「漏れることで致命的な不利益が発生する情報」ではなく、例えばオンラインゲームの通信データといったようなレベル(ハッカーに真面目に解析されたらどうしようもないがそうするほどの機密性がないもの)ならば、なんらかの単純な置換(平文を特定の数値と排他的論理和を取るなど)をした上で限定的な負号だけを使った置き換え(16進数として表現するなど)を用いればよいと思います。これはエンコードであってセキュリティー上の強度はほぼないですがわざわざハッキングするような人はあまりいないという希望的予測に基づいて使う手法です。「素人が通信データを覗き見して簡単に内容を把握できてしまう」ことの確率を下げようとするものですね。
一方絶対に漏れてはいけないものなら暗号化技術(=絶対に解読されないレベル)を使うべきでしょう。
投稿2017/02/02 08:04
総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/07 09:03