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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

1269閲覧

文字エンコード変換作業を回数指定して自動で行ってくれるツールを作りたい。

masac225

総合スコア17

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/10/22 12:36

編集2016/10/22 14:51

(↑どのタグを付ければいいかよくわからなかったので、自分が知っていて、使えそうだと思った言語を無作為に選ばさせていただきました。その点についてはご了承ください...)

いきなりですが「もじばけらった」というツールをご存知でしょうか。
ウェブ上にフリーで公開されている、文字化けをしてしまった文章を元に戻すことができるツールです。

文字エンコード作業(例えば、base64→ISO-2022-JP)を何度も繰り返すと、どんどん文字化けしていくのですが、逆の作業(ISO-2022-JP→base64)を同じ回数繰り返すと、(当たり前なのですが)元の文字列に戻ります。

この仕組みを利用して暗号を作れることに気が付いたのですが、いざ実践してみたら、結局10回くらいが忍耐力的にも限界で、これ以上手動でやるとなると、作る側も、解く側も、大変だということに気が付きました...

このままだとせっかくのアイデアが台無しになってしまうと思い、回数指定(共通鍵)を利用し自動で変換作業を行ってくれるツールを作ることにしたのです。

しかしここでも問題が発生しました。

はい...私がここで質問をしている時点で察されたと思いますが、このようなツールを作る知識が私には全く備わっていないのです。

何方か、このようなツールを作る方法をご教示していただけないでしょうか。
わがままな質問ですが、どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

まず、

ISO-2022-JP→base64
base64→ISO-2022-JP

は文字コード変換ではありません。Base64エンコーディングとデコーディングです。

いざ実践してみたら、結局10回くらいが忍耐力的にも限界で、これ以上手動でやるとなると、

どうやって変換していますか?それによって自動化の方法が違います。
Linuxコマンドでやるとすると、

Bash

1# 100回エンコード 2eval "`yes 'base64|' | head -100` cat" < 入力ファイル > 出力ファイル 3 4# 100回デコード 5eval "`yes 'base64 -d|' | head -100` cat" < 入力ファイル > 出力ファイル

本来の文字コード変換の意味で考えると、文字コードAから文字コードBに変換して、また文字コードAに戻しても、元のデータと同じになるとは限りません。理由は文字コード変換は必ずしも1対1対応では無く、1対他、他対1の対応になるケースもあるからです。

投稿2016/10/22 13:21

otn

総合スコア84538

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

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

masac225

2016/10/22 14:43 編集

ご回答ありがとうございます。 なるほど、「文字コード変換」ではないのですね(汗) 追加の質問ですが、base64とISO-2022-JP間(?)でそれらのようなケースが発生することはありますか?
otn

2016/10/22 15:00

「それらのようなケース」とは?
masac225

2016/10/22 18:15 編集

私が言いたかったのは「不可逆な暗号文になってしまうか」ということです。
otn

2016/10/22 22:59

> 私が言いたかったのは「不可逆な暗号文になってしまうか」ということです。 最後の段落に書いたことであれば、それは、文字コード変換についての話です。Base64エンコードの話ではありません。
masac225

2016/10/23 08:17

了解です、まずはLinuxの環境を作って基礎知識から学んでみることにします。
guest

0

ラップ回数は鍵として成立しないと思います。終端条件として「文字化けしていないっぽい状態」を何かしらコードで表現できれば,ラップ回数を知らなくても復元されてしまう可能性が大いにありますよね。よってこれは暗号化ではなく単なるエンコード処理に過ぎません。

また,鍵が1つしか無いのであれば,それは公開鍵暗号ではなく共通鍵暗号です。

投稿2016/10/22 13:13

mpyw

総合スコア5223

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

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

mpyw

2016/10/22 13:15

尤も,ガチの暗号化じゃなくてお遊び程度の用途ならば全然アリだとは思います。
masac225

2016/10/22 14:52 編集

ご回答ありがとうございます。 暗号の脆弱性に関しては十分存じ上げております。 そして、確かにラップ回数は公開鍵ではなく共通鍵ですね(汗) 訂正しておきます。
guest

0

まず、次のことを学んでください。

  • 文字コードと文字コード変換。
  • 暗号理論とそのコンピュータでの応用。
  • プログラミング (プログラミング言語はなんでもいです)。

それと、お願いなのですが、ご質問にあるアイディアを実際に「暗号」として利用することは、どうか思い止まっていただけないでしょうか。上に書いたことを学ばれた後なら得心いただけると信じるのですが、それは「シーザー暗号」などと呼ばれる種類の、現代では暗号であるとは認められないものです。もちろん公開鍵暗号とは露ほども関係ありません。

どうかよろしくお願いいたします。

投稿2016/10/22 14:13

ikedas

総合スコア4335

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

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

masac225

2016/10/22 14:50

ご回答ありがとうございます。 暗号開発に関してはそこまでガチではありません。 そして、この計画の目的は、あくまであの様な作業を自動で行うツールを作りたいということなので、用途はせいぜい友人間のふざけあいくらいかと...。 そもそも、このような公共の場で内容をオープンにしている以上実際には使えませんよね(汗) どうかご理解願います。
ikedas

2016/10/22 15:06

認識不足です。 暗号化アルゴリズムが既知であっても解読されないものが現代的な暗号です。ネットで「ケルクホフスの原理」を検索してみてください。 単なる仲間内のお遊びに役立てるにしては重すぎますかね。
masac225

2016/10/22 18:01

ツールの作り方が知りたいです、投げやりにしないで下さい、分からないからここに質問しているんです。 暗号のことばかり話している場合ではないですよ、私が"teratail"に質問した意味がなくなります。 私が実現しようとしているものが正しい暗号であろうと暗号でなかろうとそのツールが作れないわけではないですよね。 なのにそこで躓いているというのはどいうことでしょうか。 若しかして作り方をご存知ないのでしょうか? でしたら申し訳ないです。
guest

0

なんというか。

暗号化ならば、普通にC#に備わっている暗号クラスを使用してはいかがでしょうか。
C#には、System.Security.Cryptography という AES 暗号をサポートする名前空間があって、
そこそこ強力です。
検索すれば、わりとサンプルもありますので、そこを参考に作成してみてはいかがでしょうか?

投稿2016/10/22 12:41

mugicya

総合スコア1046

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

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

masac225

2016/10/22 12:46 編集

それを言ったら終わりですよ...(泣) ただ暗号化したい訳ではなく、文字コード変換で暗号化をしてみたいのです。 でも、単純に暗号文を作りたくなったらC#言語を使うことにします(汗)。
mugicya

2016/10/22 12:54

ああー。それは意図に気づきませんでした…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問