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

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

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

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

4回答

1716閲覧

Unity アプリからしか編集できないtxtファイルは作れますか?

niwa2019

総合スコア12

C#

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

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/05/20 01:38

Androidで、セーブデータの文字列を、外部ストレージにファイルで保存する場合について

ファイルの拡張子はtxtでもbinでも何でも構いません。

txtファイルなどを作って、その中に文字列で保存しておく方法がありますが。
そのtxtファイルは、ユーザが開くことができてしまいます。

文字列を暗号化してtxtファイルに保存しておいても、ユーザが開くことができると、データを壊してしまう可能性があります。

txtファイルがある場所、ファイルの存在は、ユーザが分かっていても、
ユーザが開くことができないようにできませんか?

ユーザが、ファイルをクラックするためのアプリやソフトを使うことは、考慮に含みません。それを防ぐのはきりがないので。

ファイルマネージャーなど、普通のアプリから、ファイルが開けなければOKです。

■希望は
ユーザは、ファイルを開くことができない。
ユーザがデータ移行やバックアップをとれるように、ファイルのコピーやペーストは可能。

パスワード付きZIPファイルのような感じでしょうか。
アプリはパスワードが分かっているのでファイルにアクセスできる。ユーザはパスワードを知らないのでファイルは開けない。のような感じです。

ファイル名の頭にピリオドをつけて、ファイルを非表示にするのはダメです。ユーザが編集できてしまいます。

Android のアプリの内部ストレージにファイルを保存しておくのはダメです。ユーザがバックアップをとれません。

Android の場合、
から、アプリだけがアクセスできる、アクセス制限のあるファイルを作れるのでしょうか?

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

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

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

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

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

takasima20

2021/05/20 02:07

開けないけどコピーできるって条件は矛盾してないスか? 単に中身を見せたくないならバイナリで保存すれば十分な気がしますが…
Zuishin

2021/05/20 02:13

パスワード付き ZIP ファイルでもバイナリエディタで開けるし、壊してしまう可能性は残ります。 ユーザーに書き込み権限がある以上、壊すのを防ぐのは不可能です。 そのファイルに対する書き込み権限を取り上げれば書き換えできなくなりますが、削除もできなくなります。 うっかり開いて壊すことまで心配していたのでは何もできません。 データをリモートに置いてネット経由でいちいち取得するのなら壊される心配はありません。
guest

回答4

0

まず大前提として、作る側はこういうの気にしますけど遊ぶ側そんな気にしないですよ。
限られている開発リソースを、存在するかも分からない人への対応(セーブデータファイルを壊そうとする人に配慮しつつ、ユーザーが編集できないようにしつつ、etc...)に使うのが果たして正解なのか。というところだと思います。

いかに堅牢なセーブシステムができたとしても、それを実行したときにロード時間が1秒でも増えようもんなら、遊ぶユーザーとしてはストレスが増えるだけです。

それを踏まえた上で割くリソースに対してメリットが十分にあるのが暗号化だと思います。JSONでのセーブデータ形式を作ることで拡張性も高まりますし、暗号化は多くの人がやっているのでサンプルなども豊富で実装コストも低めです。
https://qiita.com/tempura/items/84143f36160a66519c5e#_reference-337b852f2c48890db39f

ちなみに

文字列を暗号化してtxtファイルに保存しておいても、ユーザが開くことができると、データを壊してしまう可能性があります。

↑これとこれは同じで、考慮しなくていいと思います↓

ユーザが、ファイルをクラックするためのアプリやソフトを使うことは、考慮に含みません。それを防ぐのはきりがないので。

暗号化したファイルをいじってセーブデータを壊すなんていう状況を考慮しなくてもいいです。それこそキリがありません。
そういうの対応したいならアプリ側でオートセーブとかつけて、フォローするとかのほうが健全だと思います。

投稿2021/05/20 02:50

hogefugapiyo

総合スコア3302

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

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

0

パスワード付きZIPファイルのような感じでしょうか。

参考)
https://qiita.com/snaka/items/e36b1dd0f1b171755533
https://baba-s.hatenablog.com/entry/2017/08/24/100000

さらっと調べただけですがSharpZipLibでできそうです。

追記)
他の回答者が言っているとおり、この手の処理は普通に暗号化の方がいいと思いますが。絶対に改ざんを許さないならサーバ側に保存するしかないです。

投稿2021/05/20 02:08

編集2021/05/20 02:10
AbeTakashi

総合スコア4537

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

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

0

ユーザが、ファイルをクラックするためのアプリやソフトを使うことは、考慮に含みません。それを防ぐのはきりがないので。

そうであれば、単純にファイルを暗号化した後に拡張子を変更すればよろしいかと思います。
実際はバイナリエディタなどで開けてしまいますが、それを防ぐのは現実的に不可能ですし、そのままでは内容が分からないので開けても改ざんは困難です。
拡張子を変えていれば、それを元に戻さない限り、知識のない人が開いて破損させてしまうということもないでしょう。
アプリ内にあるパスワードを見つけられると、複合できてしまいますが、これでも上記の要求は満たされていると判断します。

あと、関係ない話ですが、

Android のアプリの内部ストレージにファイルを保存しておくのはダメです。ユーザがバックアップをとれません。

昔のアプリと保存場所が異なるため、内部ストレージに保存しても、場所さえ分かっていればユーザーがバックアップできます(ソースは失念しましたが)。
最もその場合でも、そのままファイルを開いて確認できてしまうので、結局のところ、同じ対処は必要ですが。

投稿2021/05/20 02:00

編集2021/05/20 02:14
fiveHundred

総合スコア9803

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

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

0

データならSQLiteに保存してはどうでしょう。

投稿2021/05/20 01:51

m.ts10806

総合スコア80850

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

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

m.ts10806

2021/05/20 01:52

「コマンドでアクセスしないと見れない」という制約はできますけどね。 そこまで隠したいならアプリじゃなくサーバにデータ持てばいいのにとは思う。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問