Hashids NPM (jak to działa dla programistów)
W nowoczesnych aplikacjach internetowych kluczowe znaczenie ma zapewnienie bezpieczeństwa danych i prywatności. Skutecznym sposobem ochrony poufnych informacji, takich jak identyfikatory baz danych lub adresy URL, jest użycie Hashids, biblioteki szyfrującej JavaScript, która przekształca dane numeryczne w unikalne, odwracalne i zaszyfrowane skróty. W tym artykule omówiono, jak płynnie zintegrować Hashids z aplikacją React w celu zaciemniania i dekodowania identyfikatorów.
Czym jest Hashids?
Hashids to niewielka, ale potężna biblioteka, która konwertuje dane liczbowe na ciąg znaków hash. Głównym celem jest zamaskowanie identyfikatorów numerycznych, aby zapobiec ujawnieniu poufnych informacji. Transformacja ta jest odwracalna, co pozwala na odzyskanie oryginalnych danych liczbowych w razie potrzeby. Hashids to biblioteka JavaScript służąca do generowania identyfikatorów podobnych do tych z serwisu YouTube na podstawie liczb, kodowania danych wrażliwych lub bezpiecznego udostępniania identyfikatorów bazy danych użytkownikowi, a także po prostu do zaciemniania identyfikatorów na podstawie liczb.
Włączanie Hashids do aplikacji React
Aby zintegrować Hashids z aplikacją React, wykonaj następujące kroki:
Krok 1: Zainstaluj Hashids npm
Najpierw zainstaluj Hashids za pomocą npm w swoim projekcie React:
npm install hashids
# or
yarn add hashidsnpm install hashids
# or
yarn add hashidsKrok 2: Zainicjuj instancję Hashids
W komponencie React lub pliku narzędziowym zainicjuj nową instancję Hashids z solą i opcjonalnie minimalną długością skrótu:
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;Zastąp 'your_salt_here' unikalnym ciągiem znaków (solą), którego używasz do dostosowania wyniku skrótu.
Krok 3: Kodowanie i dekodowanie danych
Po zainicjowaniu można używać Hashids do kodowania i dekodowania danych liczbowych. Na przykład kodowanie identyfikatora bazy danych:
const encodedId = hashids.encode(12345); // Example: 'B0zGbvA9' non-sequential IDsconst encodedId = hashids.encode(12345); // Example: 'B0zGbvA9' non-sequential IDsI dekodowanie z powrotem do oryginalnego identyfikatora:
const decodedIds = hashids.decode('B0zGbvA9'); // Example: [12345]const decodedIds = hashids.decode('B0zGbvA9'); // Example: [12345]Krok 4: Wykorzystaj Hashids w komponentach
W razie potrzeby zintegruj Hashids z komponentami React. Na przykład przekazywanie zaszyfrowanych identyfikatorów jako właściwości:
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>
);
};Korzyści z używania Hashids w React
- Bezpieczeństwo: Hashids zasłania numeryczne identyfikatory, zwiększając prywatność i bezpieczeństwo danych poprzez uniemożliwienie bezpośredniego powiązania z poufnymi informacjami.
- Łatwość integracji: Prosta instalacja npm i przejrzyste API sprawiają, że Hashids można łatwo wdrożyć w aplikacjach React.
- Elastyczność: Możliwość dostosowania długości skrótu i soli zapewnia elastyczność w dostosowywaniu skrótów do potrzeb bezpieczeństwa aplikacji.
Przedstawiamy IronPDF
IronPDF for Node.js to potężna biblioteka PDF dla Node.js firmy Iron Software, która pozwala programistom generować i edytować pliki PDF w ich projektach .NET. Niezależnie od tego, czy chcesz tworzyć pliki PDF z HTML, edytować istniejące pliki PDF, czy konwertować strony internetowe do formatu PDF, IronPDF spełni Twoje oczekiwania.

Najważniejsze cechy
Konwersja HTML do PDF
Z łatwością konwertuj treści HTML na dokumenty PDF. Ta funkcja jest szczególnie przydatna do generowania dynamicznych plików PDF na podstawie treści internetowych.
Konwersja adresów URL do formatu PDF
Generuj pliki PDF bezpośrednio z adresów URL, co pozwala na przechwytywanie treści stron internetowych i zapisywanie ich jako pliki PDF za pomocą kodu.
Manipulacja plikami PDF
Z łatwością scalaj, dziel i edytuj istniejące dokumenty PDF. IronPDF oferuje takie funkcje, jak dodawanie stron, dzielenie dokumentów i wiele innych.
Zabezpieczenia plików PDF
Zabezpiecz swoje dokumenty PDF, szyfrując je hasłami lub stosując podpisy cyfrowe. IronPDF oferuje opcje ochrony poufnych dokumentów przed nieuprawnionym dostępem.
Wysoka jakość tłumaczenia
Tworzenie wysokiej jakości dokumentów PDF z precyzyjnym renderowaniem tekstu, obrazów i formatowania. IronPDF gwarantuje, że wygenerowane pliki PDF zachowują wierność oryginalnej treści.
Kompatybilność międzyplatformowa
IronPDF jest kompatybilny z różnymi platformami, w tym Windows, Linux i macOS, dzięki czemu nadaje się do szerokiego zakresu środowisk programistycznych.
Prosta integracja
Z łatwością zintegruj IronPDF ze swoimi aplikacjami Node.js, korzystając z pakietu npm. API jest dobrze udokumentowane, co ułatwia włączenie funkcji generowania plików PDF do projektów.
Instalacja
Aby zainstalować pakiet IronPDF NPM, użyj następującego polecenia:
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64Generowanie dokumentów PDF za pomocą IronPDF i korzystanie z pakietu NPM HashIDs
Zainstaluj zależności: Najpierw utwórz nowy projekt Next.js (jeśli jeszcze tego nie zrobiłeś) za pomocą następującego polecenia: Zobacz tutaj
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"Następnie przejdź do katalogu projektu:
cd hashids-pdfcd hashids-pdfZainstaluj wymagane pakiety:
yarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add hashidsyarn add @ironsoftware/ironpdf @ironsoftware/ironpdf-engine-windows-x64
yarn add hashidsUtwórz plik PDF
Teraz stwórzmy prosty przykład generowania pliku PDF przy użyciu IronPDF. W komponencie Next.js (np. pages/index.tsx) dodaj następujący kod:
API do generowania plików PDF: Pierwszym krokiem jest stworzenie backendowego API do generowania dokumentów PDF. Ponieważ IronPDF działa wyłącznie po stronie serwera, musimy stworzyć API, które będzie wywoływane, gdy użytkownik zechce wygenerować plik PDF. Utwórz plik w ścieżce pages/api/pdf.js i dodaj poniższą treść.
IronPDF wymaga klucza licencyjnego, który można uzyskać na stronie licencji i umieścić w poniższym kodzie.
// 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();
}
}Teraz zmodyfikuj kod index.js w sposób przedstawiony poniżej, aby użyć hashID i IronPDF
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>
);
}Wyjaśnienie kodu
- Użytkownik wprowadza liczby w polu tekstowym.
- Wprowadzona liczba jest kodowana przy użyciu HashID i wyświetlana.
- Gdy użytkownik kliknie "Generuj PDF", wprowadzony tekst jest wysyłany do zaplecza API, które koduje i generuje dokument PDF.
Wynik


Licencja IronPDF
Umieść tutaj klucz licencyjny:
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";Wnioski
Włączenie Hashids do aplikacji React to praktyczne podejście do zabezpieczania wrażliwych danych, takich jak identyfikatory baz danych lub adresy URL. Korzystając z Hashids, możesz zapewnić bezpieczeństwo identyfikatorów, zachowując jednocześnie możliwość odzyskania oryginalnych danych w razie potrzeby.
Niezależnie od tego, czy tworzysz małą aplikację, czy złożony system Enterprise, Hashids oferuje niezawodne rozwiązanie zwiększające prywatność i bezpieczeństwo danych w projektach React oraz doskonale radzi sobie z kodowaniem numerów przyrostowych w unikalne skróty. Hashids gwarantuje, że nawet powtarzające się wzorce w liczbach wejściowych dają różne, niepowtarzalne skróty, co pozwala zachować integralność i bezpieczeństwo danych w aplikacjach.
IronPDF wyróżnia się jako solidna i wszechstronna biblioteka dla programistów node.js poszukujących kompleksowych możliwości generowania, edycji i zarządzania plikami PDF w swoich aplikacjach. Niezależnie od tego, czy tworzysz aplikacje internetowe, oprogramowanie desktopowe, czy integrujesz funkcjonalność PDF z rozwiązaniami Enterprise.








