crypto.js/index.mjs

183 lines
3.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* 加密类 md5/sha1/base64
* @author yutent<yutent.io@gmail.com>
* @date 2020/09/16 18:11:51
*/
import fs from 'fs'
import Helper from './lib/helper.mjs'
const PID = process.pid
const PPID = process.ppid
var __inc__ = 1024
/**
* [base64encode base64编码]
* @param {Str/Num/Buffer} str [要编码的字符串]
* @param {bool} urlFriendly [是否对URL友好默认否是则会把+转成-/转成_]
*/
export function base64encode(str, urlFriendly) {
var buf, str64
if (Buffer.isBuffer(str)) {
buf = str
} else {
buf = Buffer.from(str + '')
}
str64 = buf.toString('base64')
if (urlFriendly) {
return str64
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '')
}
return str64
}
/**
* [base64decode base64解码, 返回Buffer对象]
* @param {Str} str [要解码的字符串]
* @param {bool} urlFriendly [之前是否对结果采用了URL友好处理]
*/
export function base64decode(str, urlFriendly) {
if (urlFriendly) {
str = str
.replace(/-/g, '+')
.replace(/_/g, '/')
.replace(/[^A-Za-z0-9\+\/]/g, '')
}
return Buffer.from(str, 'base64')
}
/**
* [rand 生成指定长度的随机字符串]
* @param {[type]} len [要得到的字符串长度]
* @param {[type]} forceNum [是否强制返回纯数字]
*/
export function rand(len, forceNum) {
let str = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM0123456789'
if (forceNum) {
str = '0123456789'
}
let max = str.length
let tmp = ''
for (let i = 0; i < len; i++) {
let r = (Math.random() * max) >> 0
tmp += str[r]
}
return tmp
}
// 返回一个如下格式的 xxxxxxxx-xxxx-xxxx-xxxxxxxx 的唯一ID
export function uuid(pipe = '-') {
var rand = Helper.origin.randomBytes(8).toString('hex')
var now = (~~(Date.now() / 1000)).toString(16)
var inc
__inc__++
if (__inc__ > 65535) {
__inc__ = 1024
}
inc = (__inc__ + PID + PPID).toString(16).padStart(4, '0') + rand.slice(0, 4)
return (
now +
pipe +
inc.slice(0, 4) +
pipe +
inc.slice(4, 8) +
pipe +
rand.slice(-8)
)
}
/**
* [md5 md5加密]
* @param {Str/Num} str [要加密的字符串]
* @param {Str} encode [hex/base64]
*/
export function md5(str, encode) {
if (typeof str === 'number') {
str += ''
}
if (typeof str === 'string' || Buffer.isBuffer(str)) {
return Helper.hash('md5', str, encode)
}
return str
}
/**
* [md5Sign 获取文件的md5签名]
* @param {Str} file [文件路径]
*/
export function md5Sign(file) {
if (fs.accessSync(file, fs.constants.R_OK)) {
var buf = fs.readFileSync(file)
return Helper.hash('md5', buf)
}
return null
}
/**
* [sha1 sha1加密]
* @param {Str/Num} str [要加密的字符串]
* @param {Str} encode [hex/base64]
*/
export function sha1(str, encode) {
if (typeof str === 'number') {
str += ''
}
if (typeof str === 'string' || Buffer.isBuffer(str)) {
return Helper.hash('sha1', str, encode)
}
return str
}
/**
* [sha1Sign 获取文件的sha1签名]
* @param {Str} file [文件路径]
*/
export function sha1Sign(file) {
if (fs.accessSync(file, fs.constants.R_OK)) {
var buf = fs.readFileSync(file)
return Helper.hash('sha1', buf)
}
return null
}
/**
* [sha256 sha256加密]
* @param {Str/Num} str [要加密的字符串]
* @param {Str} encoding [hex/base64]
*/
export function sha256(str, encoding) {
if (typeof str === 'number') {
str += ''
}
if (typeof str === 'string' || Buffer.isBuffer(str)) {
return Helper.hash('sha256', str, encoding)
}
return str
}
/**
* [sha256Sign 获取文件的sha256签名]
* @param {Str} file [文件路径]
*/
export function sha256Sign(file) {
if (fs.accessSync(file, fs.constants.R_OK)) {
var buf = fs.readFileSync(file)
return Helper.hash('sha256', buf)
}
return null
}
export default Helper
base on crypto module
JavaScript 100%