更新记录

1.0.8(2025-12-21)

添加了 URL, URLSearchParams对象

1.0.7(2025-12-20)

  1. 增加了五星评分组件

  2. 增加了AspectRatioBox 宽高比容器组件 3.增加了二维码的外边距控制和图标及尺寸配置

  3. (补上一次changLog错误)AES SM4 Blowfish加密解密 增加了多种加解密的Padding和Mode

1.0.6(2025-12-17)

新增:Base64 Pro Max Ultra 版(性能慢20到30倍,但有丰富的功能,包括自定义字母表)

  1. Mode

CBCMode.uts CBC_CS1Mode.uts CBC_CS2Mode.uts CBC_CS3Mode.uts CFBMode.uts CTRMode.uts ECBMode.uts GCMMode.uts OFBMode.utsCBCMode.uts CBC_CS1Mode.uts CBC_CS2Mode.uts CBC_CS3Mode.uts CFBMode.uts CTRMode.uts ECBMode.uts GCMMode.uts OFBMode.uts

  1. Padding

ANSIX923Padding.uts ISO10126Padding.uts ISO78164Padding.uts NoPadding.uts PKCS1Padding.uts PKCS7Padding.uts TBCPadding.uts ZeroPadding.uts

查看更多

平台兼容性

uni-app(4.87)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
5.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟

uni-app x(4.87)

Chrome Safari Android iOS 鸿蒙 微信小程序
5.0

捐赠

上市公司【ST华铁,R通达1】董事长占款13亿。股票退市,索赔诉讼中,定损一百多万,还有负债,支持一下,要不扫个免费的支付宝红包也可以

如果你觉得本项目解决了你的问题,可以考虑支持作者:

微信赞赏码 支付宝领红包 支付宝

std-utils

这是一个工具库,实现了一些工具函数,另外对标准功能进行封装,更符合使用直觉

纯UTS实现,后续将逐渐增加并维护更多功能。

只要是UTS能支持的我尽量适配,但手里只有安卓设备,请酌情考虑。目前资金紧张,后续如果有好转我可能考虑纯免费开源。

已完成功能列表如下(API基本稳定):

UTS工具

  1. UUID v1-v7 生成解析与验证
  2. md5 (含 HMAC) (含 流式计算)
  3. sha1 (含 HMAC) (含 流式计算)
  4. sha256 (含 HMAC) (含 流式计算)
  5. sha512 (含 HMAC) (含 流式计算)
  6. sha3 (含 HMAC) (含 流式计算)
  7. sm3 (含 HMAC) (含 流式计算)
  8. EventEmiter 工具类
  9. Key Value存储 Promisify封装 包含key前缀处理
  10. Base64 Pro Max Ultra 版(性能慢20到30倍,但有丰富的功能,包括自定义字母表)
  11. AES SM4 Blowfish 对称加密算法,以及Padding 和 Mode
  12. 浏览器的 URL, URLSearchParams对象。使用方法类似 const url = new URL('https://example.com:8080/path/to/page?param1=value1&param2=value2#section1')

UI 组件

  1. 背景图片
  2. 背景视频
  3. 安全区组件
  4. 二维码组件 (后期会添加:1.二维码导出为二进制数据)
  5. 比例适配组件 AspectRatioBox
  6. 五星评分组件 Rating
<script setup>
// Hash
export { md5, hmacMd5, Md5, HmacMd5 } from './src/hash/md5.uts'
export { sha1, hmacSha1, Sha1, HmacSha1 } from './src/hash/sha1.uts'
export { sm3, hmacSm3, Sm3, HmacSm3 } from './src/hash/sm3.uts'
export { sha256, sha224, hmacSha256, hmacSha224, Sha256, HmacSha256 } from './src/hash/sha256.uts'
export { sha512, sha384, sha512_256, sha512_224, hmacSha512, hmacSha384, hmacSha512_256, hmacSha512_224, Sha512, HmacSha512 } from './src/hash/sha512.uts'
export { sha3_256, sha3_224, sha3_384, sha3_512, hmacSha3_224, hmacSha3_256, hmacSha3_384, hmacSha3_512, Sha3, HmacSha3 } from './src/hash/sha3.uts'
// UUID
export { uuidParse } from './src/uuid/parse.uts'
export { uuidRegex } from './src/uuid/regex.uts'
export { uuidStringify, uuidUnsafeStringify } from './src/uuid/stringify.uts'
export * from './src/uuid/types.uts';
export { uuidV1 } from './src/uuid/v1.uts';
export { uuidV1ToV6 } from './src/uuid/v1ToV6.uts'
export { uuidV3 } from './src/uuid/v3.uts'
export { uuidV4 } from './src/uuid/v4.uts'
export { uuidV5 } from './src/uuid/v5.uts'
export { uuidV6 } from './src/uuid/v6.uts'
export { uuidV6ToV1 } from './src/uuid/v6ToV1.uts'
export { uuidV7 } from './src/uuid/v7.uts'
export { uuidV35,uuidDNS,uuidURL } from './src/uuid/v35.uts'
export { uuidValidate } from './src/uuid/validate.uts'
export { uuidVersion } from './src/uuid/version.uts'

// Utils
export { EventEmitter } from './src/utils/EventEmitter.uts'
export { deserialize, safeDeserialize } from './src/utils/parseData.uts'
export { uint8ArrayToHex } from './src/utils/uint8ArrayToHex.uts'
export { getRandomValues } from './src/utils/random.uts'

// Net
import WebSocket from './src/net/WebSocket.uts'
export { WebSocket };
export { request } from './src/net/HTTPRequest.uts'
export { EventSource, SSEEventLine, SSEMessage } from './src/net/SSERequest.uts'

// FS
export * from './src/promisify/fs.uts'

// KV
export * from './src/promisify/storage.uts'

// URL
export { URL, URLSearchParams, UrlParts, URLSearchParamsInit } from './src/URL.uts'

// QRCode
export { QRCode } from './src/qrcode/QRCode.uts'

// Base64
export {
  Base64Alphabet,
  STANDARD_ALPHABET,
  URL_SAFE_ALPHABET
  Base64Engine,
  Base64EngineConfig,
  PAD,
  NO_PAD,
  btoa,
  atob,
  BASE64_STANDARD_ENGINE,
  BASE64_STANDARD_NO_PAD_ENGINE,
  BASE64_URL_SAFE_ENGINE,
  BASE64_URL_SAFE_NO_PAD_ENGINE
} from './src/base64';
/**
 * Crypto Library
 * 模块化加密库,包含算法、填充和模式三个部分
 */

// 导出接口
export { BlockCipher } from './BlockCipher';

// 导出算法
export { Blowfish } from './symmetric/Blowfish';
export { AES } from './symmetric/AES';
export { SM4 } from './symmetric/SM4';

// 导出填充模式
export { PKCS7Padding } from './padding/PKCS7Padding';
export { PKCS1Padding } from './padding/PKCS1Padding';
export { ZeroPadding } from './padding/ZeroPadding';
export { ISO10126Padding } from './padding/ISO10126Padding';
export { ANSIX923Padding } from './padding/ANSIX923Padding';
export { ISO78164Padding } from './padding/ISO78164Padding';
export { NoPadding } from './padding/NoPadding';
export { TBCPadding } from './padding/TBCPadding';

// 导出加密模式
export { ECBMode } from './modes/ECBMode';
export { CBCMode } from './modes/CBCMode';
export { CBC_CS1Mode } from './modes/CBC_CS1Mode'; // CBC-CTS模式变体1
export { CBC_CS2Mode } from './modes/CBC_CS2Mode'; // CBC-CTS模式变体2
export { CBC_CS3Mode } from './modes/CBC_CS3Mode'; // CBC-CTS模式变体3
export { CFBMode } from './modes/CFBMode';
export { OFBMode } from './modes/OFBMode';
export { CTRMode } from './modes/CTRMode';
export { GCMMode } from './modes/GCMMode';

</script>
<script setup>
import { EventEmitter } from "@/uni_modules/std-utils"

// 创建自定义 EventEmitter 类
class MyEventEmitter extends EventEmitter {
  constructor() {
    super()
  }
}

// 创建实例
const emitter = new MyEventEmitter()
emitter.on('message', (data : string) => {
  lastMessage.value = data
  addLog(`收到消息: ${data}`)
})

emitter.once('once', (data : string) => {
  addLog(`一次性监听触发: ${data}`)
})
emitter.emit('message', '消息')
emitter.emit('once', '一次性消息')
emitter.remove('message')
</script>
<script setup>
  import { uuidParse } from '@/uni_modules/std-utils'
  import { uuidStringify } from '@/uni_modules/std-utils'
  import { uuidVersion } from '@/uni_modules/std-utils'
  import { uuidValidate } from '@/uni_modules/std-utils'
  import { uuidV1 } from '@/uni_modules/std-utils'
  import { uuidV3 } from '@/uni_modules/std-utils'
  import { uuidV4 } from '@/uni_modules/std-utils'
  import { uuidV5 } from '@/uni_modules/std-utils'
  import { uuidV6 } from '@/uni_modules/std-utils'
  import { uuidV6ToV1, uuidV1ToV6 } from '@/uni_modules/std-utils'
  import { uuidV7 } from '@/uni_modules/std-utils'
  const v1UUID = ref('')
  const v4UUID = ref('')
  const v4UUID2 = ref('')
  const v4UUID3 = ref('')
  const v4UUID4 = ref('')
  const v1ToV6UUID = ref('')
  const uuidV4Demo = '2ba370f9-5cba-4f1f-8b46-7c412c48e45e'
  const emptyBuf = new Uint8Array(16)
  function parse() {
    const uuidBuffer = uuidParse(uuidV4Demo)
    return `[${uuidBuffer.toString()}]`
  }
  function stringify() {
    const uuidBuffer = uuidParse(uuidV4Demo)
    const str = uuidStringify(uuidBuffer)
    return str
  }

  function getVersion() {
    return uuidVersion(uuidV4Demo)
  }
  function uuidValidate(str : string) {
    try {
      uuidValidate(str)
      return true
    } catch {
      return false
    }
  }
  function uuidv1() {
    return uuidV1()
  }
  function uuidv4() {
    v4UUID.value = uuidV4().toString()
    // 传入一个buf
    const buf1 = new Uint8Array(16)
    v4UUID2.value = uuidV4({ random: buf1 }).toString()
    console.log("V4_传入的buf1变了", buf1.toString());
    // 传入一个buf
    const buf2 = new Uint8Array(16)
    v4UUID3.value = uuidV4({}, buf2).toString()
    console.log("V4_传入的buf2变了", buf2.toString());
    const buf3 = new Uint8Array(32)
    v4UUID3.value = uuidV4({}, buf3, 16).toString()
    console.log("V4_从buf的16字节开始往后写", buf3.toString());
    console.log("--------------------------");
  }
  uuidv4()
  setInterval(() => {
    v1UUID.value = uuidV1() as string
    v1ToV6UUID.value = uuidV1ToV6(v1UUID.value).toString()
  }, 1000)
  function uuidv3() {
    return uuidV3(emptyBuf, uuidV4Demo)
  }
  function uuidv5() {
    return uuidV5(emptyBuf, uuidV4Demo)
  }
  function uuidv6() {
    return uuidV6()
  }
  function uuidv7() {
    return uuidV7()
  }
</script>
<script>
  // 自定义字母表base64
  const customAlphabetText = ref('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+-')
  // 创建自定义字母表,这里使用一个变化的字母表作为示例
  const customAlphabet = new Base64Alphabet(
    customAlphabetText.value
  )
  const customEngine = new Base64Engine(customAlphabet, PAD)
  customAlphabetEncoded.value = customEngine.encode(originalText.value)
</script>

<background-video src='/static/bg.mp4'>
  背景视频
</background-video>
<background-image src='/static/logo.png'>
  背景图片
</background-image>

<!-- 二维码 -->
<QRCode :text="qrText" :size="size" :level="level" :type-number="typeNumber" :background-color="backgroundColor"
  :foreground-color="foregroundColor" />

<rating 
  :value="4.2" 
  :count="5"
  :size="40"
  :gap="5"
  star-color="#ffd700"
  star-background-color="#f0f0f0"
  border-color="#d0d0d0"
  :corner-radius="0.2"
  :inner-corner-radius="0.1"
  @star-click="handleStarClick"
/>

<AspectRatioBox :ratio="16/9" :sourceWidth="300">
  <view class="content">
    <Rating :value="3" />
    <view> -----根据原设计稿宽度缩放------</view>
    <view> -----原设计300缩放到当前------</view>
  </view>
</AspectRatioBox>

目录下有一些其他工具函数,如果你已经购买,可以参考到你的项目中,但不保证API的稳定

  1. WebSocket (与nodejs的ws API接近)
  2. Post SSE 未实现重连和lastID功能 (由于官方API实现会把请求的数据长期存储,直至链接中断一次性返回,不知道是存在内存还是磁盘缓存,如果长时间链接,可能存在问题)
  3. HTTP请求Promisify封装
  4. 文件 Promisify封装(未测试)
  5. 路由跳转 Promisify封装(未测试)

未来将添加

  1. 防抖节流

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率: