【问题标题】:Steganography from Audio File using JavaScript使用 JavaScript 从音频文件进行隐写术
【发布时间】:2021-01-24 14:23:52
【问题描述】:

我正在尝试解决一个问题,即我必须在网站上上传的音频文件中找到一个文本。该文本仅作为纯文本隐藏在音频文件的二进制代码中。只有当音频可以播放时,我才必须使用 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

但我无法从这里继续前进。我没有找到将其转换为字符串或任何可以检查二进制数据是否包含所述文本的格式的方法。

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

还尝试将变量创建为 Blob 的实例,但我遇到了 'type : 'audio/*' 的问题,因为它不被接受,而我不确定音频文件的格式。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript steganography


    【解决方案1】:

    blob() 返回一个承诺,因此您需要使用awaitthen。此外,为了获取内容,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);
            });
          });
        });
    

    【讨论】:

    • 我尝试了一些类似的方法,但由于文件大小仍然很高,它有点陷入困境。尝试支持您的答案,但像我这样的低级生物没有选择它。感谢您的回复。我解决了,请在下面查看我的答案。
    【解决方案2】:

    我解决了这个问题。我的问题是我必须找到一个 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);
          }
        };
      } 
    

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 2011-05-03
      • 2022-11-27
      • 1970-01-01
      • 2014-06-04
      • 2014-09-12
      • 2018-08-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多