krc歌词文件解析

本文介绍如何在iOS平台上实现KRC歌词文件的解密,详细讲述了从无到有的过程,包括查找资料、Java版解密代码的移植,并提供了iOS平台的解密解决方案。适用于需要处理KRC逐字歌词同步的开发者。

       做卡拉ok项目时,逐字歌词同步需要很多高精度的lrc文件,目前国内有2大家:拥有专利的kugou和没有专利的qq音乐。二者各推出了一种逐字同步歌词文件: krc和qrc。krc有加密处理,直接打开的话只能看到乱码。

       查找了很多资料,发现只有java版的半成品解密代码,而没有ios平台可用的。经过我半天努力,终于移植到ios平台。个人劳动成果,转载请注明来源。谢谢!本文提供ios平台的krc文件解密解决办法。

//
//  KRC.h
//  iOSKRCDecoder
//
//  Created by zeng songgen on 12-8-2.
//  Copyright (c) 2012年 zeng songgen. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface KRC : NSObject
{
    //FileStream fs;
    
    //头部4字节
    NSMutableData * HeadBytes;
    
    //异或加密内容
    NSMutableData * EncodedBytes;
    
    //解异或加密后ZIP数据
    NSMutableData * ZipBytes;
    
    //UNZIP后数据
    NSData * UnzipBytes;
}

- (NSString *) Decode: (NSString * )filePath;

@end

//
//  KRC.m
//  iOSKRCDecoder
//
//  Created by zeng songgen on 12-8-2.
//  Copyright (c) 2012年 zeng songgen. All rights reserved.
//

#import "KRC.h"
#import "GTMNSData+zlib.h"

@implementation KRC

//异或加密 密钥
- (NSString *) Decode: (NSString * )filePath
{
    NSString * EncKey = @"@Gaw^2tGQ61-ÎÒni";
    //char EncKey[] = { '@', 'G', 'a', 'w', '^', '2', 't', 'G', 'Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i' };
    
    NSData * totalBytes = [[NSMutableData alloc] initWithContentsOfFile:filePath];
    //HeadBytes = [[NSMutableData alloc] initWithData:[totalBytes subdataWithRange:NSMakeRange(0, 4)]];
    EncodedBytes = [[NSMutableData alloc] initWithData:[totalBytes subdataWithRange:NSMakeRange(4, totalBytes.length - 4)]];
    
    ZipBytes = [[NSMutableData alloc] initWithCapacity:EncodedBytes.length];
    
    Byte * encodedBytes = EncodedBytes.mutableBytes;
    
    int EncodedBytesLength = EncodedBytes.length;
    
    for (int i = 0; i < EncodedBytesLength; i++)
    {
        int l = i % 16;
        char c = [EncKey characterAtIndex:l];
        
        Byte b = (Byte)((encodedBytes[i]) ^ c);
        
        [ZipBytes appendBytes:&b length:1];
        
    }
    UnzipBytes = [NSData gtm_dataByInflatingData:ZipBytes];
    
    NSString * s = [[[NSString alloc] initWithData:UnzipBytes encoding:NSUTF8StringEncoding] autorelease];
    
    return s;
}

@end


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值