base64 格式转换
This commit is contained in:
parent
20c27b2e5b
commit
b757597db9
85
src/App.tsx
85
src/App.tsx
@ -4,7 +4,7 @@ import { VERSION } from './version'
|
|||||||
import { sm3Digest, sm3Hmac } from './utils/algorithm/sm3'
|
import { sm3Digest, sm3Hmac } from './utils/algorithm/sm3'
|
||||||
import { sm4Encrypt, sm4Decrypt } from './utils/algorithm/sm4'
|
import { sm4Encrypt, sm4Decrypt } from './utils/algorithm/sm4'
|
||||||
import { sm2GenerateKeyPair, sm2GetPublicKeyFromPrivateKey, sm2Encrypt, sm2Decrypt, sm2Sign, sm2Verify } from './utils/algorithm/sm2'
|
import { sm2GenerateKeyPair, sm2GetPublicKeyFromPrivateKey, sm2Encrypt, sm2Decrypt, sm2Sign, sm2Verify } from './utils/algorithm/sm2'
|
||||||
import { hexToUtf8, utf8ToHex } from './utils/convert'
|
import { hexToUtf8, utf8ToHex, hexToBase64, base64ToHex } from './utils/convert'
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [activeTab, setActiveTab] = useState('sm3')
|
const [activeTab, setActiveTab] = useState('sm3')
|
||||||
@ -67,6 +67,7 @@ function App() {
|
|||||||
// 转换工具状态
|
// 转换工具状态
|
||||||
const [hexInput, setHexInput] = useState('')
|
const [hexInput, setHexInput] = useState('')
|
||||||
const [utf8Input, setUtf8Input] = useState('')
|
const [utf8Input, setUtf8Input] = useState('')
|
||||||
|
const [base64Input, setBase64Input] = useState('')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -130,6 +131,26 @@ function App() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hex 转 Base64
|
||||||
|
const handleHexToBase64 = () => {
|
||||||
|
try {
|
||||||
|
const base64 = hexToBase64(hexInput)
|
||||||
|
setBase64Input(base64)
|
||||||
|
} catch (error) {
|
||||||
|
alert('转换失败: ' + error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Base64 转 Hex
|
||||||
|
const handleBase64ToHex = () => {
|
||||||
|
try {
|
||||||
|
const hex = base64ToHex(base64Input)
|
||||||
|
setHexInput(hex)
|
||||||
|
} catch (error) {
|
||||||
|
alert('转换失败: ' + error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SM2 生成密钥对
|
// SM2 生成密钥对
|
||||||
const handleGenerateSm2KeyPair = () => {
|
const handleGenerateSm2KeyPair = () => {
|
||||||
try {
|
try {
|
||||||
@ -962,7 +983,7 @@ function App() {
|
|||||||
{/* 转换工具面板 */}
|
{/* 转换工具面板 */}
|
||||||
{activeTab === 'convert' && (
|
{activeTab === 'convert' && (
|
||||||
<div className="panel" style={{ backgroundColor: '#1e1e1e', padding: '20px', borderRadius: '8px', boxShadow: '0 2px 4px rgba(0, 0, 0, 0.3)' }}>
|
<div className="panel" style={{ backgroundColor: '#1e1e1e', padding: '20px', borderRadius: '8px', boxShadow: '0 2px 4px rgba(0, 0, 0, 0.3)' }}>
|
||||||
<h2 style={{ color: '#f59e0b', marginBottom: '20px' }}>Hex / UTF8 转换</h2>
|
<h2 style={{ color: '#f59e0b', marginBottom: '20px' }}>Hex / UTF8 / Base64 转换</h2>
|
||||||
|
|
||||||
<div style={{ display: 'flex', gap: '1rem', marginBottom: '1rem', flexDirection: isMobile ? 'column' : 'row' }}>
|
<div style={{ display: 'flex', gap: '1rem', marginBottom: '1rem', flexDirection: isMobile ? 'column' : 'row' }}>
|
||||||
<div className="form-group" style={{ flex: 1 }}>
|
<div className="form-group" style={{ flex: 1 }}>
|
||||||
@ -1020,8 +1041,64 @@ function App() {
|
|||||||
resize: 'vertical'
|
resize: 'vertical'
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<div style={{ display: 'flex', gap: '10px', marginTop: '0.5rem' }}>
|
||||||
|
<button
|
||||||
|
onClick={handleHexToUtf8}
|
||||||
|
style={{
|
||||||
|
padding: '8px 16px',
|
||||||
|
border: 'none',
|
||||||
|
borderRadius: '4px',
|
||||||
|
background: '#f59e0b',
|
||||||
|
color: '#121212',
|
||||||
|
fontSize: '14px',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
cursor: 'pointer',
|
||||||
|
transition: 'background 0.3s ease',
|
||||||
|
flex: 1
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
UTF8 ← Hex
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
onClick={handleHexToBase64}
|
||||||
|
style={{
|
||||||
|
padding: '8px 16px',
|
||||||
|
border: 'none',
|
||||||
|
borderRadius: '4px',
|
||||||
|
background: '#f59e0b',
|
||||||
|
color: '#121212',
|
||||||
|
fontSize: '14px',
|
||||||
|
fontWeight: 'bold',
|
||||||
|
cursor: 'pointer',
|
||||||
|
transition: 'background 0.3s ease',
|
||||||
|
flex: 1
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Base64 ← Hex
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="form-group" style={{ flex: 1 }}>
|
||||||
|
<label style={{ display: 'block', marginBottom: '5px', color: '#e0e0e0' }}>Base64 输入</label>
|
||||||
|
<textarea
|
||||||
|
value={base64Input}
|
||||||
|
onChange={(e) => setBase64Input(e.target.value)}
|
||||||
|
placeholder="输入 Base64 字符串"
|
||||||
|
style={{
|
||||||
|
height: '200px',
|
||||||
|
width: '100%',
|
||||||
|
padding: '10px',
|
||||||
|
border: '1px solid #333',
|
||||||
|
borderRadius: '4px',
|
||||||
|
backgroundColor: '#2d2d2d',
|
||||||
|
color: '#e0e0e0',
|
||||||
|
fontSize: '14px',
|
||||||
|
resize: 'vertical'
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<button
|
<button
|
||||||
onClick={handleHexToUtf8}
|
onClick={handleBase64ToHex}
|
||||||
style={{
|
style={{
|
||||||
marginTop: '0.5rem',
|
marginTop: '0.5rem',
|
||||||
padding: '8px 16px',
|
padding: '8px 16px',
|
||||||
@ -1035,7 +1112,7 @@ function App() {
|
|||||||
transition: 'background 0.3s ease'
|
transition: 'background 0.3s ease'
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
UTF8 ← Hex
|
Hex ← Base64
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -9,3 +9,15 @@ export const utf8ToHex = (utf8: string): string => {
|
|||||||
const bytes = new TextEncoder().encode(utf8)
|
const bytes = new TextEncoder().encode(utf8)
|
||||||
return Array.from(bytes).map(byte => byte.toString(16).padStart(2, '0')).join('')
|
return Array.from(bytes).map(byte => byte.toString(16).padStart(2, '0')).join('')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hex 转 Base64
|
||||||
|
export const hexToBase64 = (hex: string): string => {
|
||||||
|
const bytes = new Uint8Array(hex.match(/.{1,2}/g)?.map(byte => parseInt(byte, 16)) || [])
|
||||||
|
return btoa(String.fromCharCode(...bytes))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Base64 转 Hex
|
||||||
|
export const base64ToHex = (base64: string): string => {
|
||||||
|
const bytes = new Uint8Array(Array.from(atob(base64), char => char.charCodeAt(0)))
|
||||||
|
return Array.from(bytes).map(byte => byte.toString(16).padStart(2, '0')).join('')
|
||||||
|
}
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
export const VERSION = "V1.0-20260418065443";
|
export const VERSION = "V1.0-20260418070227";
|
||||||
Loading…
Reference in New Issue
Block a user