【问题标题】:crypto.createHmac is not a function + angularcrypto.createHmac 不是函数 + 角度
【发布时间】:2020-06-20 00:18:25
【问题描述】:

我正在尝试让加密库工作以使用特定方法createHmac 目标是使用它来将图像上传到天蓝色存储 blob。 related post I made ,但我不断收到crypto.createHmac is not a function 我的问题有一个相关帖子 How to use 'crypto' module in Angular2? ,但我已经尝试了该帖子中的所有答案,但我仍然遇到问题。我不知道如何克服这一点。感谢您的帮助!


import { BlobServiceClient, AnonymousCredential, newPipeline } from '@azure/storage-blob';



  async addImagesToBlob() {


    let currentFile = this.file[0];

    const accountName = environment.accountName;
    const key = environment.key;
    const start = new Date(new Date().getTime() - (15 * 60 * 1000));
    const end = new Date(new Date().getTime() + (30 * 60 * 1000));
    const signedpermissions = 'rwdlac';
    const signedservice = 'b';
    const signedresourcetype = 'sco';
    const signedexpiry = end.toISOString().substring(0, end.toISOString().lastIndexOf('.')) + 'Z';
    const signedProtocol = 'https';
    const signedversion = '2018-03-28';

    const StringToSign =
      accountName + '\n' +
      signedpermissions + '\n' +
      signedservice + '\n' +
      signedresourcetype + '\n' +
      '\n' +
      signedexpiry + '\n' +
      '\n' +
      signedProtocol + '\n' +
      signedversion + '\n';
    const crypto = require('crypto');


    let sig = crypto.createHmac('sha256', Buffer.from(key, 'base64')).update(StringToSign, 'utf8').digest('base64');


    const sasToken = `sv=${(signedversion)}&ss=${(signedservice)}&srt=${(signedresourcetype)}&sp=${(signedpermissions)}&se=${encodeURIComponent(signedexpiry)}&spr=${(signedProtocol)}&sig=${encodeURIComponent(sig)}`;
    const containerName = environment.containerName;

    const pipeline = newPipeline(new AnonymousCredential(), {
      retryOptions: { maxTries: 4 }, // Retry options
      userAgentOptions: { userAgentPrefix: "AdvancedSample V1.0.0" }, // Customized telemetry string
      keepAliveOptions: {
        // Keep alive is enabled by default, disable keep alive by setting false
        enable: false
      }
    });
    const blobServiceClient = new BlobServiceClient(`https://${accountName}.blob.core.windows.net?${sasToken}`,
      pipeline)
    const containerClient = blobServiceClient.getContainerClient(containerName)
    if (!containerClient.exists()) {
      console.log("the container does not exit")
      await containerClient.create()

    }
    const client = containerClient.getBlockBlobClient(currentFile.name)
    const response = await client.uploadBrowserData(currentFile, {
      blockSize: 4 * 1024 * 1024, // 4MB block size
      concurrency: 20, // 20 concurrency
      onProgress: (ev) => console.log(ev),
      blobHTTPHeaders: { blobContentType: currentFile.type }
    })
    console.log(response._response.status);
  }

【问题讨论】:

    标签: node.js angular typescript cryptography


    【解决方案1】:

    以下步骤解决了我的问题:

    1. npm install crypto-js --save
    2. npm install @types/node --save
    3. import { Crypto } from 'crypto-js'
    4. Crypto.createHmac() -> 调用 @987654327 时请注意 'Crypto' 而不是 'crypto' @。

    【讨论】:

      猜你喜欢
      • 2022-10-04
      • 2020-05-09
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2016-11-07
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多