Zum Fußzeileninhalt springen
NODE-HILFE

Hashids NPM (Wie es für Entwickler funktioniert)

In modernen Webanwendungen ist es entscheidend, die Datensicherheit und den Datenschutz zu gewährleisten. Eine effektive Methode, um sensible Informationen wie Datenbank-IDs oder URLs zu schützen, ist die Verwendung von Hashids, einer JavaScript-Verschlüsselungsbibliothek, die numerische Daten in eindeutige, umkehrbare und verschlüsselte Hashes verwandelt. Dieser Artikel untersucht, wie Sie Hashids nahtlos in Ihre React-Anwendung integrieren können, um Kennungen zu verschleiern und zu dekodieren.

Was ist Hashids?

Hashids ist eine kleine, aber leistungsstarke Bibliothek, die numerische Daten in einen Hash-String umwandelt. Das Hauptziel besteht darin, numerische Kennungen zu verbergen, um die Offenlegung sensibler Informationen zu verhindern. Diese Transformation ist umkehrbar, sodass die ursprünglichen numerischen Daten bei Bedarf wiederhergestellt werden können. Hashids ist eine JavaScript-Bibliothek zur Generierung von YouTube-ähnlichen IDs aus Zahlen, zum Codieren sensibler Daten, zum sicheren Bereitstellen Ihrer Datenbank-IDs für den Benutzer oder einfach zum Verschleiern von IDs aus Zahlen.

Integration von Hashids in Ihre React-App

Um Hashids in Ihre React-Anwendung zu integrieren, befolgen Sie diese Schritte:

Schritt 1: Installieren Sie Hashids npm

Installieren Sie zuerst Hashids über npm in Ihrem React-Projekt:

npm install hashids
# or
yarn add hashids
npm install hashids
# or
yarn add hashids
SHELL

Schritt 2: Initialisieren Sie die Hashids-Instanz

Initialisieren Sie in Ihrem React-Komponenten- oder Dienstprogrammdatei eine neue Hashids-Instanz mit einem Salt und optional einer minimalen Hash-Länge:

import { useState, useEffect } from 'react';
import Hashids from 'hashids';

// React component demonstrating Hashids integration
const MyComponent = () => {
  const [hashids, setHashids] = useState(null);

  useEffect(() => {
    // Initialize the Hashids library with a custom salt string and minimum hash length of 8
    const initHashids = new Hashids('your_salt_here', 8); // Replace 'your_salt_here' with your actual salt or configure custom alphabet
    setHashids(initHashids);
  }, []);

  // Other component logic here
  return (
    <div>
      {/* Your JSX content */}
    </div>
  );
};

export default MyComponent;
import { useState, useEffect } from 'react';
import Hashids from 'hashids';

// React component demonstrating Hashids integration
const MyComponent = () => {
  const [hashids, setHashids] = useState(null);

  useEffect(() => {
    // Initialize the Hashids library with a custom salt string and minimum hash length of 8
    const initHashids = new Hashids('your_salt_here', 8); // Replace 'your_salt_here' with your actual salt or configure custom alphabet
    setHashids(initHashids);
  }, []);

  // Other component logic here
  return (
    <div>
      {/* Your JSX content */}
    </div>
  );
};

export default MyComponent;
JAVASCRIPT

Ersetzen Sie 'your_salt_here' durch einen eindeutigen String (Salt), den Sie verwenden, um die Hash-Ausgabe anzupassen.

Schritt 3: Codieren und Dekodieren von Daten

Sobald initialisiert, können Sie Hashids verwenden, um numerische Daten zu codieren und zu dekodieren. Zum Beispiel das Codieren einer Datenbank-ID:

const encodedId = hashids.encode(12345); // Example: 'B0zGbvA9' non-sequential IDs
const encodedId = hashids.encode(12345); // Example: 'B0zGbvA9' non-sequential IDs
JAVASCRIPT

Und deren Dekodierung zurück zur ursprünglichen ID:

const decodedIds = hashids.decode('B0zGbvA9'); // Example: [12345]
const decodedIds = hashids.decode('B0zGbvA9'); // Example: [12345]
JAVASCRIPT

Schritt 4: Verwenden Sie Hashids in Komponenten

Integrieren Sie Hashids in Ihre React-Komponenten, wo nötig. Zum Beispiel die Übergabe von gehashten IDs als Props:

const MyComponent = ({ id }) => {
  // Encode ID using Hashids if the hashids instance is initialized
  const encodedId = hashids ? hashids.encode(id) : '';

  return (
    <div>
      <p>Encoded ID: {encodedId}</p>
      {/* Other JSX content */}
    </div>
  );
};
const MyComponent = ({ id }) => {
  // Encode ID using Hashids if the hashids instance is initialized
  const encodedId = hashids ? hashids.encode(id) : '';

  return (
    <div>
      <p>Encoded ID: {encodedId}</p>
      {/* Other JSX content */}
    </div>
  );
};
JAVASCRIPT

Vorteile der Verwendung von Hashids in React

  • Sicherheit: Hashids verschleiert numerische IDs, erhöht die Datensicherheit und den Datenschutz, indem es verhindert, dass direkt auf sensible Informationen zugegriffen wird.
  • Einfachheit der Integration: Einfache npm-Installation und eine einfache API machen Hashids leicht in React-Anwendungen umsetzbar.
  • Flexibilität: Anpassbare Hash-Länge und Salt bieten Flexibilität, um die Hashes an die Sicherheitsanforderungen Ihrer Anwendung anzupassen.

Einführung in IronPDF

IronPDF for Node.js ist eine leistungsstarke Node.js-PDF-Bibliothek von Iron Software, die Entwicklern ermöglicht, PDFs in ihren .NET-Projekten zu erzeugen und zu bearbeiten. Egal, ob Sie PDFs aus HTML erstellen, vorhandene PDFs manipulieren oder Webseiten ins PDF-Format konvertieren müssen, IronPDF hat alles abgedeckt.

Hashids NPM (So funktioniert es für Entwickler): Abbildung 1 - IronPDF für Node.js: Die Node.js-PDF-Bibliothek

Hauptmerkmale

HTML-zu-PDF-Konvertierung

Konvertieren Sie HTML-Inhalte mühelos in PDF-Dokumente. Dieses Feature ist besonders nützlich zur Erzeugung dynamischer PDFs aus Webinhalten.

URL-zu-PDF-Konvertierung

Erzeugen Sie PDFs direkt von URLs, sodass Sie die Inhalte von Webseiten erfassen und als PDF-Dateien programmatisch speichern können.

PDF-Manipulation

Verschmelzen, teilen und manipulieren Sie vorhandene PDF-Dokumente mit Leichtigkeit. IronPDF bietet Funktionen wie das Anhängen von Seiten, das Splitten von Dokumenten und mehr.

PDF-Sicherheit

Sichern Sie Ihre PDF-Dokumente, indem Sie sie mit Passwörtern verschlüsseln oder digitale Signaturen anwenden. IronPDF bietet Optionen zum Schutz Ihrer sensiblen Dokumente vor unberechtigtem Zugriff.

Hohe Ausgabequalität

Erzeugen Sie hochwertige PDF-Dokumente mit präziser Wiedergabe von Text, Bildern und Formatierungen. IronPDF stellt sicher, dass Ihre generierten PDFs die Originalinhalte getreu wiedergeben.

Plattformübergreifende Kompatibilität

IronPDF ist kompatibel mit verschiedenen Plattformen, darunter Windows, Linux und macOS, was es für eine breite Palette von Entwicklungsumgebungen geeignet macht.

Einfache Integration

Integrieren Sie IronPDF mühelos in Ihre Node.js-Anwendungen mithilfe seines npm-Pakets. Die API ist gut dokumentiert, was es einfach macht, PDF-Erzeugungsfunktionen in Ihre Projekte einzubauen.

Installation

Um das IronPDF-npm-Paket zu installieren, verwenden Sie den folgenden Befehl:

yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
SHELL

PDF-Dokumente mit IronPDF generieren und das HashIDs-NPM-Paket verwenden

Installieren Sie Abhängigkeiten: Erstellen Sie zunächst ein neues Next.js-Projekt (falls Sie noch keins haben) mit folgendem Befehl: Hinweise finden Sie hier

npx create-next-app@latest hashids-pdf --use-npm --example "https://github.com/vercel/next-learn/tree/main/basics/learn-starter"
npx create-next-app@latest hashids-pdf --use-npm --example "https://github.com/vercel/next-learn/tree/main/basics/learn-starter"
SHELL

Navigieren Sie als Nächstes in Ihr Projektverzeichnis:

cd hashids-pdf
cd hashids-pdf
SHELL

Installieren Sie die erforderlichen Pakete:

yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add hashids
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add hashids
SHELL

Erstellen eines PDFs

Lassen Sie uns nun ein einfaches Beispiel zur Generierung eines PDFs mit IronPDF erstellen. Fügen Sie in Ihrer Next.js-Komponente (z. B. pages/index.tsx) den folgenden Code hinzu:

PDF-Erzeugungs-API: Der erste Schritt besteht darin, eine Backend-API zur Erzeugung des PDF-Dokuments zu erstellen. Da IronPDF nur serverseitig läuft, müssen wir eine API erstellen, die aufgerufen wird, wenn ein Benutzer ein PDF generieren möchte. Erstellen Sie im Pfad pages/api/pdf.js eine Datei und fügen Sie die unten stehenden Inhalte hinzu.

IronPDF benötigt einen Lizenzschlüssel, den Sie von der Lizenzseite erhalten und im unten stehenden Code platzieren können.

// pages/api/pdf.js
import { IronPdfGlobalConfig, PdfDocument } from "@ironsoftware/ironpdf";
import Hashids from 'hashids';

// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Your license key";

export default async function handler(req, res) {
  try {
    const initHashids = new Hashids('IronPDF Is Awesome and this is the salt', 8);
    const f = req.query.f;
    const l = initHashids.encode(f);

    let content = "<h1>Demo Hashids and Generate PDF Using IronPDF</h1>";
    content += "<p>Input:" + f + "</p>";
    content += "<p>HashID:" + l + "</p>";

    const pdf = await PdfDocument.fromHtml(content);
    const data = await pdf.saveAsBuffer();

    res.setHeader("Content-Type", "application/pdf");
    res.setHeader(
      "Content-Disposition",
      "attachment; filename=awesomeIron.pdf"
    );
    res.send(data);
  } catch (error) {
    console.error("Error generating PDF:", error);
    res.status(500).end();
  }
}
// pages/api/pdf.js
import { IronPdfGlobalConfig, PdfDocument } from "@ironsoftware/ironpdf";
import Hashids from 'hashids';

// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Your license key";

export default async function handler(req, res) {
  try {
    const initHashids = new Hashids('IronPDF Is Awesome and this is the salt', 8);
    const f = req.query.f;
    const l = initHashids.encode(f);

    let content = "<h1>Demo Hashids and Generate PDF Using IronPDF</h1>";
    content += "<p>Input:" + f + "</p>";
    content += "<p>HashID:" + l + "</p>";

    const pdf = await PdfDocument.fromHtml(content);
    const data = await pdf.saveAsBuffer();

    res.setHeader("Content-Type", "application/pdf");
    res.setHeader(
      "Content-Disposition",
      "attachment; filename=awesomeIron.pdf"
    );
    res.send(data);
  } catch (error) {
    console.error("Error generating PDF:", error);
    res.status(500).end();
  }
}
JAVASCRIPT

Ändern Sie nun den index.js-Code wie unten, um den HashID und IronPDF zu verwenden.

import Head from "next/head";
import styles from "../styles/Home.module.css";
import React, { useState, useEffect } from "react";
import Hashids from 'hashids';

export default function Home() {
  const [text, setText] = useState("");
  const [etext, seteText] = useState("");
  const [hashids, setHashids] = useState(null);

  // Initialize Hashids on component mount
  useEffect(() => {
    const initHashids = new Hashids('IronPDF Is Awesome and this is the salt', 8);
    setHashids(initHashids);
  }, []);

  // Generate PDF by calling backend API
  const generatePdf = async () => {
    try {
      const response = await fetch("/api/pdf?f=" + text);
      const blob = await response.blob();
      const url = window.URL.createObjectURL(new Blob([blob]));
      const link = document.createElement("a");
      link.href = url;
      link.setAttribute("download", "awesomeIron.pdf");
      document.body.appendChild(link);
      link.click();
      link.parentNode.removeChild(link);
    } catch (error) {
      console.error("Error generating PDF:", error);
    }
  };  

  // Handle text change and encode input number
  const handleChange = (event) => {
    seteText(hashids ? hashids.encode(event.target.value) : '');
    setText(event.target.value);
  };

  return (
    <div className={styles.container}>
      <Head>
        <title>Generate PDF Using IronPDF</title>
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <main>
        <h1>Demo Hashids and Generate PDF Using IronPDF</h1>
        <p>
          <span>Enter Url To get Hashids and Convert to PDF:</span>{" "}
        </p>
        <input type="number" value={text} onChange={handleChange} />
        <p>
          HashID of input: {etext}
        </p>        
        <button style={{ margin: 20, padding: 5 }} onClick={generatePdf}>
          Generate PDF 
        </button>
      </main>
      <style jsx>{`
        main {
          padding: 5rem 0;
          flex: 1;
          display: flex;
          flex-direction: column;
          justify-content: center;
          align-items: center;
        }
        footer {
          width: 100%;
          height: 100px;
          border-top: 1px solid #eaeaea;
          display: flex;
          justify-content: center;
          align-items: center;
        }
        footer img {
          margin-left: 0.5rem;
        }
        footer a {
          display: flex;
          justify-content: center;
          align-items: center;
          text-decoration: none;
          color: inherit;
        }
        code {
          background: #fafafa;
          border-radius: 5px;
          padding: 0.75rem;
          font-size: 1.1rem;
          font-family:
            Menlo,
            Monaco,
            Lucida Console,
            Liberation Mono,
            DejaVu Sans Mono,
            Bitstream Vera Sans Mono,
            Courier New,
            monospace;
        }
      `}</style>
      <style jsx global>{`
        html,
        body {
          padding: 0;
          margin: 0;
          font-family:
            -apple-system,
            BlinkMacSystemFont,
            Segoe UI,
            Roboto,
            Oxygen,
            Ubuntu,
            Cantarell,
            Fira Sans,
            Droid Sans,
            Helvetica Neue,
            sans-serif;
        }
        * {
          box-sizing: border-box;
        }
      `}</style>
    </div>
  );
}
import Head from "next/head";
import styles from "../styles/Home.module.css";
import React, { useState, useEffect } from "react";
import Hashids from 'hashids';

export default function Home() {
  const [text, setText] = useState("");
  const [etext, seteText] = useState("");
  const [hashids, setHashids] = useState(null);

  // Initialize Hashids on component mount
  useEffect(() => {
    const initHashids = new Hashids('IronPDF Is Awesome and this is the salt', 8);
    setHashids(initHashids);
  }, []);

  // Generate PDF by calling backend API
  const generatePdf = async () => {
    try {
      const response = await fetch("/api/pdf?f=" + text);
      const blob = await response.blob();
      const url = window.URL.createObjectURL(new Blob([blob]));
      const link = document.createElement("a");
      link.href = url;
      link.setAttribute("download", "awesomeIron.pdf");
      document.body.appendChild(link);
      link.click();
      link.parentNode.removeChild(link);
    } catch (error) {
      console.error("Error generating PDF:", error);
    }
  };  

  // Handle text change and encode input number
  const handleChange = (event) => {
    seteText(hashids ? hashids.encode(event.target.value) : '');
    setText(event.target.value);
  };

  return (
    <div className={styles.container}>
      <Head>
        <title>Generate PDF Using IronPDF</title>
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <main>
        <h1>Demo Hashids and Generate PDF Using IronPDF</h1>
        <p>
          <span>Enter Url To get Hashids and Convert to PDF:</span>{" "}
        </p>
        <input type="number" value={text} onChange={handleChange} />
        <p>
          HashID of input: {etext}
        </p>        
        <button style={{ margin: 20, padding: 5 }} onClick={generatePdf}>
          Generate PDF 
        </button>
      </main>
      <style jsx>{`
        main {
          padding: 5rem 0;
          flex: 1;
          display: flex;
          flex-direction: column;
          justify-content: center;
          align-items: center;
        }
        footer {
          width: 100%;
          height: 100px;
          border-top: 1px solid #eaeaea;
          display: flex;
          justify-content: center;
          align-items: center;
        }
        footer img {
          margin-left: 0.5rem;
        }
        footer a {
          display: flex;
          justify-content: center;
          align-items: center;
          text-decoration: none;
          color: inherit;
        }
        code {
          background: #fafafa;
          border-radius: 5px;
          padding: 0.75rem;
          font-size: 1.1rem;
          font-family:
            Menlo,
            Monaco,
            Lucida Console,
            Liberation Mono,
            DejaVu Sans Mono,
            Bitstream Vera Sans Mono,
            Courier New,
            monospace;
        }
      `}</style>
      <style jsx global>{`
        html,
        body {
          padding: 0;
          margin: 0;
          font-family:
            -apple-system,
            BlinkMacSystemFont,
            Segoe UI,
            Roboto,
            Oxygen,
            Ubuntu,
            Cantarell,
            Fira Sans,
            Droid Sans,
            Helvetica Neue,
            sans-serif;
        }
        * {
          box-sizing: border-box;
        }
      `}</style>
    </div>
  );
}
JAVASCRIPT

Code-Erklärung

  1. Der Benutzer gibt Eingabezahlen über das Textfeld ein.
  2. Die Eingabezahl wird mit HashID codiert und angezeigt.
  3. Wenn der Benutzer auf "PDF generieren" klickt, wird der eingegebene Text an eine Backend-API gesendet, die ihn codiert und ein PDF-Dokument erzeugt.

Ausgabe

Hashids NPM (So funktioniert es für Entwickler): Abbildung 2

PDF

Hashids NPM (So funktioniert es für Entwickler): Abbildung 3

IronPDF-Lizenz

IronPDF.

Platzieren Sie hier den Lizenzschlüssel:

import { IronPdfGlobalConfig, PdfDocument } from "@ironsoftware/ironpdf";
// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Add Your key here";
import { IronPdfGlobalConfig, PdfDocument } from "@ironsoftware/ironpdf";
// Apply your IronPDF license key
IronPdfGlobalConfig.getConfig().licenseKey = "Add Your key here";
JAVASCRIPT

Abschluss

Die Integration von Hashids in Ihre React-Anwendung ist ein praktischer Ansatz, um sensible Daten wie Datenbank-IDs oder URLs zu schützen. Mit Hashids können Sie sicherstellen, dass Kennungen sicher bleiben, während die Möglichkeit erhalten bleibt, die ursprünglichen Daten bei Bedarf abzurufen.

Egal, ob Sie eine kleine Anwendung oder ein komplexes Enterprise-System entwickeln, Hashids bietet eine verlässliche Lösung zur Verbesserung der Datensicherheit und des Datenschutzes in Ihren React-Projekten und zeichnet sich darin aus, inkrementierte Zahlen in eindeutige Hashes zu kodieren. Hashids stellt sicher, dass selbst wiederholende Muster in Eingabezahlen zu unterschiedlichen, nicht wiederholenden Hashes führen und Datenintegrität und Sicherheit in Anwendungen gewährleisten.

IronPDF zeichnet sich als robuste und vielseitige Bibliothek für Node.js-Entwickler aus, die umfassende PDF-Erstellungs-, Manipulations- und Verwaltungsfunktionen in ihren Anwendungen suchen. Egal, ob Sie Webanwendungen, Desktop-Software oder PDF-Funktionalität in Unternehmenslösungen integrieren.

Darrius Serrant
Full-Stack-Software-Ingenieur (WebOps)

Darrius Serrant hat einen Bachelor-Abschluss in Informatik von der University of Miami und arbeitet als Full-Stack-WebOps-Marketing-Ingenieur bei Iron Software. Seit seiner Jugend vom Programmieren angezogen, sah er die Informatik als sowohl mysteriös als auch zugänglich, was es zum perfekten Medium für Kreativität und Problemlösung ...

Weiterlesen