做卡拉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

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

被折叠的 条评论
为什么被折叠?



