使用JavaScript从音频文件隐写

使用JavaScript从音频文件隐写,javascript,steganography,Javascript,Steganography,我试图解决一个问题,其中我必须找到一个音频文件中的文本,是上传到网站上。文本仅以纯文本形式隐藏在音频文件的二进制代码中。只有当音频播放完毕时,我才需要使用JavaScript 虽然音频播放器工作正常,但我无法“进入”音频文件二进制数据 到目前为止我所做的是 function playMusic() { if (!isPaused) { player.src = URL.createObjectURL(songs[currentSong]); fetch(player.src)

我试图解决一个问题,其中我必须找到一个音频文件中的文本,是上传到网站上。文本仅以纯文本形式隐藏在音频文件的二进制代码中。只有当音频播放完毕时,我才需要使用JavaScript

虽然音频播放器工作正常,但我无法“进入”音频文件二进制数据

到目前为止我所做的是

function playMusic() {
  if (!isPaused) {
    player.src = URL.createObjectURL(songs[currentSong]);
    fetch(player.src).then(function (response) {
      var fileAsBlob = response.blob();
      console.log(fileAsBlob);
    });
我得到的结果是:

Promise {<pending>}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Blob
size: 6423486
type: "audio/mpeg"
__proto__: Blob
arrayBuffer: ƒ arrayBuffer()
size: (...)
slice: ƒ slice()
stream: ƒ stream()
text: ƒ text()
type: (...)
constructor: ƒ Blob()
Symbol(Symbol.toStringTag): "Blob"
get size: ƒ size()
get type: ƒ type()
__proto__: Object
Promise{}
__承诺
[[PromiseState]]:“已履行”
[[PromiserResult]]:Blob
尺码:6423486
类型:“音频/mpeg”
__原型:水滴
arrayBuffer:ƒarrayBuffer()
尺寸:(…)
切片:ƒ切片()
溪流:ƒ溪流()
正文:ƒtext()
类型:(…)
构造函数:ƒBlob()
Symbol(Symbol.toStringTag):“Blob”
获取大小:ƒsize()
获取类型:ƒtype()
__原型:对象
但我无法从这里继续前进。我没有找到一种方法将其转换为字符串或任何格式,以检查二进制数据是否包含所述文本

我尝试读取文件,但它不接受上述变量作为Blob。因此不能使用readAsText或readAsArrayBuffer

还尝试将变量创建为Blob实例,但我对'type:'audio/*'有问题,因为它不被接受,而我不确定音频文件将采用哪种格式

任何帮助都将不胜感激。

blob()
返回承诺,因此您可以使用
wait
then
。另外,要获取内容,在
blob
上还有另一个名为
text
的方法,它还返回一个承诺。因此,不妨尝试一下,看看您是否可以使用以下任一输出:

function playMusic() {
  if (!isPaused) {
    player.src = URL.createObjectURL(songs[currentSong]);
    fetch(player.src).then(function (response) {
      response.blob().then(function(fileAsBlob) {
        console.log(fileAsBlob);
        fileAsBlob.text(function(fileAsText) {
          console.log(fileAsText);
        });
      });
    });
blob()。另外,要获取内容,在
blob
上还有另一个名为
text
的方法,它还返回一个承诺。因此,不妨尝试一下,看看您是否可以使用以下任一输出:

function playMusic() {
  if (!isPaused) {
    player.src = URL.createObjectURL(songs[currentSong]);
    fetch(player.src).then(function (response) {
      response.blob().then(function(fileAsBlob) {
        console.log(fileAsBlob);
        fileAsBlob.text(function(fileAsText) {
          console.log(fileAsText);
        });
      });
    });

我努力解决这个问题。我的问题是我必须找到一个FileID,即文本以FileID开头:“id data”,我必须获取id数据

我的解决方案:

function playMusic() {
  if (!isPaused) {
    player.src = URL.createObjectURL(songs[currentSong]);
    let songBArray = new File([songs[currentSong]], "name");

    let fReader = new FileReader();
    fReader.readAsText(songBArray);
    fReader.onload = function (ev) {
      if (fReader.result.indexOf("FileID:")) {
        var n = fReader.result.indexOf("FileID:");
        let fileID = "";
        for (let j = n + 7; ; j++) {
          var ch = fReader.result[j];

          if ((ch >= "0" && ch <= "9") || (ch >= "A" && ch <= "Z")) {
            fileID += ch;
          } else {
            break;
          }
        }
        console.log(fileID);
      }
    };
  } 
函数播放音乐(){
如果(!i暂停){
player.src=URL.createObjectURL(歌曲[currentSong]);
让songBArray=新文件([songs[currentSong]],“name”);
让fReader=newfilereader();
fReader.readAsText(songBArray);
fReader.onload=功能(ev){
if(fReader.result.indexOf(“FileID:”){
var n=fReader.result.indexOf(“FileID:”);
让fileID=“”;
for(设j=n+7;;j++){
var ch=fReader.result[j];

如果((ch>=“0”&&ch=“A”&&ch我解决了这个问题。我的问题是我必须找到一个文件id,即文本以文件id开头:“id数据”,我必须获取id数据

我的解决方案:

function playMusic() {
  if (!isPaused) {
    player.src = URL.createObjectURL(songs[currentSong]);
    let songBArray = new File([songs[currentSong]], "name");

    let fReader = new FileReader();
    fReader.readAsText(songBArray);
    fReader.onload = function (ev) {
      if (fReader.result.indexOf("FileID:")) {
        var n = fReader.result.indexOf("FileID:");
        let fileID = "";
        for (let j = n + 7; ; j++) {
          var ch = fReader.result[j];

          if ((ch >= "0" && ch <= "9") || (ch >= "A" && ch <= "Z")) {
            fileID += ch;
          } else {
            break;
          }
        }
        console.log(fileID);
      }
    };
  } 
函数播放音乐(){
如果(!i暂停){
player.src=URL.createObjectURL(歌曲[currentSong]);
让songBArray=新文件([songs[currentSong]],“name”);
让fReader=newfilereader();
fReader.readAsText(songBArray);
fReader.onload=功能(ev){
if(fReader.result.indexOf(“FileID:”){
var n=fReader.result.indexOf(“FileID:”);
让fileID=“”;
for(设j=n+7;;j++){
var ch=fReader.result[j];

如果((ch>=“0”和&ch=“A”&&ch我尝试过一些类似的方法,但由于文件大小仍然很高,它有点陷入了困境。尝试过更新你的答案,但像我这样的低等生物没有选择。谢谢你的回答。我解决了它,请检查下面的答案。我尝试过一些类似的方法,但由于文件大小仍然很高,它有点陷入了困境。尝试过更新我不知道你的答案,但像我这样的低等生物没有选择权。不过谢谢你的回答。我解决了它,请检查下面我的答案。