プログラミングで詰んだ助けて
■ このスレッドは過去ログ倉庫に格納されています
Linuxコマンドで BASE64に変換するアルゴリズム知ってる人いない? $ base64 foo.dat # エンコード $ base64 -d foo.txt # デコード あ、伝わってないかもしれないけど BASE64に変換するコマンドが知りたいんじゃない。そのコマンドがどういうアルゴリズムでBASE64に変換してるかが知りたい よくわかんないけどオープンソースならソースコード読めば 確かにLinuxならオープンソースだからソースあるかな? シフト演算などしながら6ビットずつ取り出してマッピング変換していく せめてLinux板行けよ腐っても昔2chを閉鎖の危機から救ったエリート集団だぞ それLinux関係ないじゃん base64についてググれ >>17 それ渡す値が奇数だとエラー吐くよな?だいたいのライブラリがそうなんだけど Linuxコマンドは奇数でも勝手に色々補完してくれて正常に動作するんだよねそれが知りたい chatGPTに聞いてダメな時は もう一度部屋を作りなおして聞け >>22 仰ってる意味がわからん 奇数ってなんだ? >>22 確かスペースを=に補完するとか色々あったな 本来の仕様把握しろよ base64のエンコード/デコードくらい仕様読みながら自分で実装できるだろ >>26 16進数をpythonでBASE64に変換するとする a="01020304050607fff" これでaの長さが17で奇数じゃん? これをpythonのライブラリに投げるとエラー吐くんだけど Linuxコマンドなら正常に変換してくれる 原因わかったわ >>1 のpythonコードが間違ってるわ a=b"01020304050607fff" でやってみろ多分動くぞ >>33 という話なのかなぁ? でも単純にFとか0で埋めたら違う結果になるしなぁ >>35 それやったら全く違う文字列が返ってくるんよな 例えばLinuxコマンドだとdddddが返ってくるのにpythonでやるとccccccが返ってくるみいな >>39 じゃあ a=bytes.fromhex("01020304050607fff") だな pythonやってると意識しなくてすむけどプログラミングやるなら型も勉強しとくといい import base64 a="01020304050607fff".encode('utf-8') print(base64.b64encode(a)) 動くやんけ https://ideone.com/iqVPfW >>40 そのライブラリでlengthが奇数だと16進数じゃない値を渡してるって言われて困ってる 実際に試してほしいエラーでない? >>40 あーこれ偶数になるように0埋めしなきゃだめかも >>43 16進数扱う物に16進数じゃない文字列渡してるからだろw >>41 なんかそれだとLinuxコマンドと別の文字列返ってるんよな仕組みがわからん。 エンコードしてる文字コードの問題? >>44 安易な0埋めをするとエンコード結果がサンプルと別物になる。 まじでわかんない詰みなんです。Linuxコマンドのソースを見るしかない >>47 何を変換するとpythonとlinuxでそれぞれどうなるのか具体例を出してくれ ライブラリのバグの可能性はほぼないから実装が間違ってるんだと思うぞ まずLinuxコマンド。渡す文字列?のlengthが奇数の321でも問題なく変換できる echo "07001bc1000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" | xxd -r -p - | base64 ↓変換結果 BwAbwQAAAP////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////w== なんかmateで見るとクソ小さくなってる まずLinuxコマンド。渡す文字列?のlengthが奇数の321でも問題なく変換できる echo "07001bc1000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" | xxd -r -p - | base64 ↓変換結果 BwAbwQAAAP////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////w== え。なにこれ。mateで見ると文字が小さい >>51 がLinuxコマンドでやった結果 pythonでやってみると奇数なのでエラーがでます a = '07001bc1000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' b = bytes.fromhex(a) encoded_bytes = base64.b64encode(b) print(encoded_bytes.decode()) 0やF埋めをしてみると値が変わってしまいます ↓結果 BwAbwQAAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8= >>35 や>>41 の方法でやるとこうなる MDcwMDFiYzEwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZg== だれかこっからどういう改善したらLinuxコマンドと同じ結果にできるかわからない? なるほどこれはxxdの問題だな xxdだと奇数だったら末尾を削るんだ a = '07001bc1000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' b = bytes.fromhex(a) encoded_bytes = base64.b64encode(b) print(encoded_bytes.decode()) でやるとうまくいくはず >>60 ありがとう! まじかそんな単純なアルゴリズムだったのか。 じゃあ変数が奇数かどうか判定して奇数なら末尾スライスするだけでOKか ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる