プログラミングで詰んだ助けて

■ このスレッドは過去ログ倉庫に格納されています
0001以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:07:18.383ID:XYsRtAxXd
Linuxコマンドで
BASE64に変換するアルゴリズム知ってる人いない?

0012以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:12:25.082ID:2OoiGOf80
>>7でおわってた

0013以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:12:43.260ID:XYsRtAxXd
chatGptに聞いてもだめだった

0014以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:13:08.366ID:Gri6Yewc0
最終手段は逆汗かね

0015以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:13:12.863ID:XYsRtAxXd
確かにLinuxならオープンソースだからソースあるかな?

0016以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:13:38.607ID:FfJZfh/e0
頭の悪い人ってこんな思考なんだな

0017以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:14:27.339ID:oSziLMBEd
シフト演算などしながら6ビットずつ取り出してマッピング変換していく

0018以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:14:30.814ID:wnHrEMaq0
せめてLinux板行けよ腐っても昔2chを閉鎖の危機から救ったエリート集団だぞ

0019以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:15:05.734ID:1gHV8Fc+0
それLinux関係ないじゃん
base64についてググれ

0020以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:15:47.319ID:8CxNB8gBM
何をエンコードするのか内容による

0021以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:16:30.124ID:Pf/bcUkf0
>>9
コード読め

0022以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:17:03.625ID:XYsRtAxXd
>>17
それ渡す値が奇数だとエラー吐くよな?だいたいのライブラリがそうなんだけど
Linuxコマンドは奇数でも勝手に色々補完してくれて正常に動作するんだよねそれが知りたい

0023以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:17:03.979ID:kJlZbQEc0
chatGPTに聞いてダメな時は
もう一度部屋を作りなおして聞け

0024以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:17:40.614ID:Pf/bcUkf0
てか全然詰んでない
詰んでんの頭だろ

0025以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:19:26.954ID:McsbuHFKM
それlinux関係ないからbase64の仕様読め

0026以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:19:43.039ID:oSziLMBEd
>>22
仰ってる意味がわからん
奇数ってなんだ?

0027以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:22:23.756ID:2OoiGOf80
>>22
確かスペースを=に補完するとか色々あったな
本来の仕様把握しろよ

0028以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:23:00.698ID:aiiSPcVU0
6ビットごとに文字を割り当てるんや

0029以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:23:28.498ID:rslgkHv00
base64のエンコード/デコードくらい仕様読みながら自分で実装できるだろ

0030以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:24:13.444ID:2OoiGOf80
てかchatgptへの聞き方悪すぎだろ

0031以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:24:29.512ID:h8ek9anL0
俺らに聞くよりchatgptに聞いた方が早いよ

0032以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:24:48.357ID:XYsRtAxXd
>>26
16進数をpythonでBASE64に変換するとする

a="01020304050607fff"
これでaの長さが17で奇数じゃん?

これをpythonのライブラリに投げるとエラー吐くんだけど
Linuxコマンドなら正常に変換してくれる

0033以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:27:59.368ID:S0yA9nerr
パディングどうやってるかの話?

0034以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:28:39.418ID:McsbuHFKM
原因わかったわ
>>1のpythonコードが間違ってるわ

0035以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:30:08.329ID:McsbuHFKM
a=b"01020304050607fff"
でやってみろ多分動くぞ

0036以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:30:15.316ID:XYsRtAxXd
>>33
という話なのかなぁ?
でも単純にFとか0で埋めたら違う結果になるしなぁ

0037以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:30:27.476ID:8CxNB8gBM
(´・ω・`)int()float()使えば

0038以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:33:32.532ID:KEWs04uta
エラー出てるんならエラーの内容読めよ

0039以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:34:41.684ID:XYsRtAxXd
>>35
それやったら全く違う文字列が返ってくるんよな

例えばLinuxコマンドだとdddddが返ってくるのにpythonでやるとccccccが返ってくるみいな

0040以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:37:55.142ID:McsbuHFKM
>>39
じゃあ
a=bytes.fromhex("01020304050607fff")
だな
pythonやってると意識しなくてすむけどプログラミングやるなら型も勉強しとくといい

0041以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:38:53.854ID:oSziLMBEd
import base64
a="01020304050607fff".encode('utf-8')
print(base64.b64encode(a))
動くやんけ
https://ideone.com/iqVPfW

0042以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:39:57.217ID:qZRIEE950
バイト列にエンコードしてなかっただけか

0043以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:41:40.283ID:XYsRtAxXd
>>40
そのライブラリでlengthが奇数だと16進数じゃない値を渡してるって言われて困ってる
実際に試してほしいエラーでない?

0044以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:42:50.341ID:McsbuHFKM
>>40
あーこれ偶数になるように0埋めしなきゃだめかも

0045以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:44:13.357ID:qZRIEE950
>>43
16進数扱う物に16進数じゃない文字列渡してるからだろw

0046以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:47:32.617ID:XYsRtAxXd
>>41
なんかそれだとLinuxコマンドと別の文字列返ってるんよな仕組みがわからん。
エンコードしてる文字コードの問題?

0047以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:50:16.783ID:XYsRtAxXd
>>44
安易な0埋めをするとエンコード結果がサンプルと別物になる。

まじでわかんない詰みなんです。Linuxコマンドのソースを見るしかない

0048以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:53:44.727ID:Xu6l6xHlM
静的型付けを学ばなかった弊害出てるな

0049以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:53:53.565ID:McsbuHFKM
>>47
何を変換するとpythonとlinuxでそれぞれどうなるのか具体例を出してくれ
ライブラリのバグの可能性はほぼないから実装が間違ってるんだと思うぞ

0050以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 08:56:53.762ID:XYsRtAxXd
>>49
わかった少し待って

0051以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:03:32.510ID:XYsRtAxXd
まずLinuxコマンド。渡す文字列?のlengthが奇数の321でも問題なく変換できる

echo "07001bc1000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" | xxd -r -p - | base64

↓変換結果

BwAbwQAAAP//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////w==

0052以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:04:26.032ID:XYsRtAxXd
なんかmateで見るとクソ小さくなってる
まずLinuxコマンド。渡す文字列?のlengthが奇数の321でも問題なく変換できる

echo "07001bc1000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" | xxd -r -p - | base64

↓変換結果

BwAbwQAAAP//////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////w==

0053以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:05:27.814ID:XYsRtAxXd
え。なにこれ。mateで見ると文字が小さい
>>51がLinuxコマンドでやった結果

0054以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:08:46.288ID:XYsRtAxXd
pythonでやってみると奇数なのでエラーがでます

a = '07001bc1000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
b = bytes.fromhex(a)
encoded_bytes = base64.b64encode(b)
print(encoded_bytes.decode())

0やF埋めをしてみると値が変わってしまいます

↓結果

BwAbwQAAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////8=

0055以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:10:28.341ID:Tp8WZ3vOa
>>53
AA解除しろ

0056以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:10:29.237ID:YBe8hH700
base64コマンドのソース見ればよくね

0057以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:10:34.613ID:XYsRtAxXd
>>35>>41の方法でやるとこうなる


MDcwMDFiYzEwMDAwMDAwZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZg==

0058以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:19:09.522ID:XYsRtAxXd
だれかこっからどういう改善したらLinuxコマンドと同じ結果にできるかわからない?

0059以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:25:40.658ID:McsbuHFKM
うーん?
確かに違う値が出るな

0060以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:34:59.561ID:McsbuHFKM
なるほどこれはxxdの問題だな
xxdだと奇数だったら末尾を削るんだ

a = '07001bc1000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'
b = bytes.fromhex(a)
encoded_bytes = base64.b64encode(b)
print(encoded_bytes.decode())

でやるとうまくいくはず

0061以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:40:45.389ID:TLpoDGe20
>>60ありがとう!
まじかそんな単純なアルゴリズムだったのか。
じゃあ変数が奇数かどうか判定して奇数なら末尾スライスするだけでOKか

0062以下、5ちゃんねるからVIPがお送りします2023/05/27(土) 09:49:09.759ID:TLpoDGe20
ほんとだ。自分でも確認してみたけど
末尾消してる

■ このスレッドは過去ログ倉庫に格納されています