古早smp格式音頻轉(zhuǎn)成mp3

花了好多時(shí)間才找到的將smp格式轉(zhuǎn)成mp3格式的代碼,線上網(wǎng)站轉(zhuǎn)都失敗了,也找了些exe程序轉(zhuǎn)出來(lái)也播放不了,估計(jì)是密鑰不對(duì)。

操作步驟:

  1. 將下面的python代碼保存成smptmp3.py文件,修改里面的密鑰為你的smp文件的密鑰(看第2步),修改smp文件目錄,打開(kāi)電腦的命令行工具,執(zhí)行python3 smptmp3.py命令,等著就好了,會(huì)在smp文件目錄的同級(jí)有一個(gè)新的解密目錄,里面就是轉(zhuǎn)好的mp3文件。
import os
import re
 
def clean_filename(filename):
    # 替換文件名中的非法字符
    filename = re.sub(r'[<>:"/\\|?*]', '_', filename)  # 替換Windows系統(tǒng)中的非法字符
    return filename
 
def xor_decrypt(data, key):
    key_length = len(key)
    decrypted_data = bytearray()
    for i in range(0, len(data), key_length):
        data_segment = data[i:i+key_length]
        if len(data_segment) == key_length:
            for j in range(key_length):
                decrypted_data.append(data_segment[j] ^ key[j])
        else:
            for j in range(len(data_segment)):
                decrypted_data.append(data_segment[j] ^ key[j])
            for j in range(key_length - len(data_segment)):
                decrypted_data.append(key[j] ^ 0)  # 使用 0 作為填充
    return decrypted_data
 
def decrypt_file(input_filename, output_filename, key):
    print(f"Attempting to decrypt {input_filename} to {output_filename}")
    if not os.path.exists(os.path.dirname(output_filename)):
        print(f"Creating directory {os.path.dirname(output_filename)}")
        os.makedirs(os.path.dirname(output_filename))
    with open(input_filename, 'rb') as infile, open(output_filename, 'wb') as outfile:
        data = infile.read()
        decrypted_data = xor_decrypt(data, key)
        outfile.write(decrypted_data)
        print(f'Decrypted {input_filename} to {output_filename}')
 
def decrypt_files_in_directory(src_dir, dest_dir, key):
    if not os.path.exists(dest_dir):
        os.makedirs(dest_dir)
     
    for root, dirs, files in os.walk(src_dir):
        for file in files:
            if file.endswith('.smp'):
                src_file_path = os.path.join(root, file)
                relative_path = os.path.relpath(src_file_path, src_dir)
                dest_file_path = os.path.join(dest_dir, relative_path).replace('.smp', '.mp3')
                # 清理文件名
                dest_file_name = clean_filename(os.path.basename(dest_file_path))
                dest_file_path = os.path.join(dest_dir, os.path.dirname(relative_path), dest_file_name)
                print(f"Processing file {src_file_path} to {dest_file_path}")
                decrypt_file(src_file_path, dest_file_path, key)
 
# 需要修改的密鑰
key = [0x14, 0x13, 0x12, 0x11]
 
# 源目錄和目標(biāo)目錄
src_dir = "/d/Downloads/俱樂(lè)部"  # 替換為你的父文件夾路徑
 
dest_dir_suffix = '-解密'
dest_dir = src_dir + dest_dir_suffix  # 新文件夾的路徑
 
# 開(kāi)始解密
decrypt_files_in_directory(src_dir, dest_dir, key)

  1. 如何獲取smp文件的密鑰

windows電腦的話就用WinHex程序打開(kāi),Mac電腦可以在Appstore下載Hex Fiend,讀取smp文件的16進(jìn)制數(shù)據(jù)

圖中是Hex Fiend打開(kāi)看到的數(shù)據(jù),密鑰就是前面重復(fù)的部分 0x14 0x13 0x12 0x11 就是密鑰

Hex Fiend打開(kāi)smp文件
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容