答案 0 :(得分:3)
您正在寻找的技术称为'steganography'.
这不是C#(这比人们想象的复杂得多),但是this is related.。您可能希望使用p / invoke使用它,或将其移植到C#代码中。
答案 1 :(得分:0)
我也正在开展一个类似的项目......首先你必须了解mp3文件结构...我希望this link可以帮助你解决mp3文件结构......一旦你清楚了关于文件结构你自己编写代码很容易...将mp3文件作为流文件并从中提取每一帧(一旦你了解了mp3文件结构,这应该很简单...事实上,它只需要几个小时让我写一个代码来做那个)...以及关于你的算法的建议。一个5 MB的mp3文件或多或少有15,000个帧......所以,如果你想要每帧替换一个位,你可以存储的最大数据是2KB ......
我尝试过相同的但我每帧更改了一个BYTE ...这会在生成的文件中引入一些噪音...有关如何降低噪音的任何建议......!?!?!??希望我的回答可以帮助你...... :)
答案 2 :(得分:0)
我能够弄清楚并想出了我自己的算法,Rzr你所说的是对的。
mp3文件是高度压缩的文件,任何帧中的任何位变化都会引入巨大的噪音。
有办法解决这个问题,
Soln_1: Hide the text data and in any of the bit of each byte and reconstruct the frame using humming code
Soln_2: which i was able to do it, using Layer III, BitRate=128000, SampleRate=441000, Padding=0
缺点:文件大小会因非预期用户无法预测而增加,除非他拥有原始mp3文件的确切副本。
能够实现:没有噪音我能够在3mb mp3文件中隐藏高达5kb的文本数据
解决方法:
step1: scan every 8 bytes in each frame
step2: take a 8 bits from the text data
预先定义每个框架中每个文本数据位置的位置,例如:第四个位置。
step3: check every 4th bit location of each byte of the frame is same as the each bit of the text data are same
例如为:
文本数据一个字节为01110001
来自mp3数据帧的第1个8字节
byte_1: 01101111 -->4th location bit is 0
byte_2: 01111111 -->4th location bit is 1
byte_3: 01111001 -->4th location bit is 1
byte_4: 01111011 -->4th location bit is 1
byte_5: 01100011 -->4th location bit is 0
byte_6: 01101100 -->4th location bit is 0
byte_7: 01101011 -->4th location bit is 0
byte_8: 01110011 -->4th location bit is 1
所以这个字节来自帧,每个4th
位的位置都有与文本数据位相同的位。
Step4: note down the location of the byte in the mp3 data frame, in this case its "1" that is 1st location
如果来自mp3数据帧的字节与数据位不匹配,则跳过该字节并继续下一个字节,继续执行相同操作直到隐藏整个文本数据。
Step5:now take all the locations where the text data is present and add these as a byte to the data frame of mp3.
这是我能够成功实施的一个解决方案。