質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

1691閲覧

php encodeについて

enigumalu

総合スコア192

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/02/02 05:44

phpで記号が入らない形式で暗号化する方法ってありますでしょうか。
base64でエンコード、デコードしようと思ったんですが/+=が入ってしまうので別の方法を考えています。
可逆性で数字英数字だけはセキュリティ的に弱いでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

「暗号化」自体の処理は、PHPに組み込まれたOpenSSLなどで、適宜行って下さい。自分で暗号化アルゴリズムを作るのは、基本的にデメリットしかありません。

暗号化した後で、いちばんシンプルに「英数字だけ」の出力にしようと思えば、16進数にしたものをそのまま出力、という方法があります(長さはもとの2倍になります)。

投稿2017/02/02 05:50

編集2017/02/02 06:20
maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enigumalu

2017/02/07 09:03

OpenSSLを調べたのですがこれのみで記号のみの形にできるのでしょうか? それとも暗号化後さらに記号にする処理を追加する形なのでしょうか
guest

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

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enigumalu

2017/02/07 09:11

調べて試してみたのですがunpackはバイナリからなにがしかの形でデータを切り出している ことを利用して暗号化後の変数を加工する認識であっていますでしょうか? かなり文字列が長くなるので短くする方法はありますでしょうか
otn

2017/02/07 13:44

> unpackはバイナリからなにがしかの形でデータを切り出していることを利用して暗号化後の変数を加工する認識 すいません。文章の意味がわかりません。 unpackはバイト列を指定した形式で文字列に変換します。 > かなり文字列が長くなるので短くする方法はありますでしょうか H変換は4ビットずつ16進数文字1文字に変換するので、長さが2倍になります。 英数字のみに変換したいと言うことであれば、自分で変換プログラムを書かない限りでは、2倍というのは妥当でしょう。
guest

0

復号化できる前提であればmcryptなど利用されてみてはいかがでしょうか?

投稿2017/02/02 05:52

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

エンコードという言葉が一般用語としては暗号化の意味合いを持つため、勘違いすることもあるかも知れません。しかし、計算機科学では多くの文脈で(?)暗号化とエンコードは違った意味合いで使われることが多いと思います。

上でいった暗号化(encription)とエンコード(encoding)は目的が違うのですが、その点が明らかになると他の回答者さんが答えておられる背景がよくわかると思います。

  • 暗号化(encryption)

事実上第三者による盗聴・偽装が不可能なレベルを指すことが多いと思います。RSA公開鍵暗号法の例でいうと大きな数の素因数分解が理論的に困難(世界で一番頭がいい人が最高の計算機設備を使って生涯をかけても解けないと信じられている)という根拠で使われています。

  • エンコード(encoding)

単にインターフェース上の都合で単純な可逆置換を行うものであって必ずしも暗号化として有効なものではありません。BASE64などだとよく知られたアルゴリズムなのである程度の知識をもった人なら誰でも簡単に一瞬で平文に戻せます。ですからセキュリティー上は「平文を流しているのとなんら変わらないレベル」と捉えるべきです。

もし質問者さんが「漏れることで致命的な不利益が発生する情報」ではなく、例えばオンラインゲームの通信データといったようなレベル(ハッカーに真面目に解析されたらどうしようもないがそうするほどの機密性がないもの)ならば、なんらかの単純な置換(平文を特定の数値と排他的論理和を取るなど)をした上で限定的な負号だけを使った置き換え(16進数として表現するなど)を用いればよいと思います。これはエンコードであってセキュリティー上の強度はほぼないですがわざわざハッキングするような人はあまりいないという希望的予測に基づいて使う手法です。「素人が通信データを覗き見して簡単に内容を把握できてしまう」ことの確率を下げようとするものですね。

一方絶対に漏れてはいけないものなら暗号化技術(=絶対に解読されないレベル)を使うべきでしょう。

投稿2017/02/02 08:04

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問