diff --git a/src/utils/common.ts b/src/utils/common.ts
index 9d425f5..dcc53b2 100644
--- a/src/utils/common.ts
+++ b/src/utils/common.ts
@@ -1,3 +1,4 @@
+import { Md5 } from 'ts-md5';
 import { $t } from '@/locales';
 
 /**
@@ -84,3 +85,15 @@ export function tagColor(index: number) {
 
   return tagMap[index % 5];
 }
+
+/**
+ * MD-5 哈希
+ *
+ * @param text 明文
+ * @returns md5哈希
+ */
+export function md5(text: string): string {
+  const md5Digest = new Md5();
+  md5Digest.appendAsciiStr(text);
+  return md5Digest.end() as string;
+}
diff --git a/src/views/_builtin/login/modules/pwd-login.vue b/src/views/_builtin/login/modules/pwd-login.vue
index c21580a..04acb95 100644
--- a/src/views/_builtin/login/modules/pwd-login.vue
+++ b/src/views/_builtin/login/modules/pwd-login.vue
@@ -1,6 +1,6 @@
 <script setup lang="ts">
 import { reactive } from 'vue';
-import { Md5 } from 'ts-md5';
+import { md5 } from '@/utils/common';
 import { $t } from '@/locales';
 import { useFormRules, useNaiveForm } from '@/hooks/common/form';
 import { useAuthStore } from '@/store/modules/auth';
@@ -32,9 +32,7 @@ const rules: Record<RuleKey, App.Global.FormRule> = {
 
 async function handleSubmit() {
   await validate();
-  const md5 = new Md5();
-  md5.appendAsciiStr(model.password);
-  const password: string = md5.end() as string;
+  const password = md5(model.password);
   await authStore.login(model.userName, password);
 }
 </script>
diff --git a/src/views/user/manager/modules/user-manager-operate-drawer.vue b/src/views/user/manager/modules/user-manager-operate-drawer.vue
index f68f0f6..c1a66f8 100644
--- a/src/views/user/manager/modules/user-manager-operate-drawer.vue
+++ b/src/views/user/manager/modules/user-manager-operate-drawer.vue
@@ -4,6 +4,7 @@ import type { OptionValue } from 'naive-ui/es/transfer/src/interface';
 import { useFormRules, useNaiveForm } from '@/hooks/common/form';
 import OperateDrawer from '@/components/common/operate-drawer.vue';
 import { $t } from '@/locales';
+import { md5 } from '@/utils/common';
 import { fetchAddUser, fetchEditUser, fetchGetAllGroupConfigList } from '@/service/api';
 import { groupConfigYesOrNoOptions, roleRecordOptions } from '@/constants/business';
 import Permission = Api.UserManager.Permission;
@@ -101,14 +102,31 @@ async function handleSubmit() {
   // request
   if (props.operateType === 'add') {
     const { username, password, checkPassword, role, permissions } = model;
-    const { error } = await fetchAddUser({ username, password, checkPassword, role, permissions });
+    const passwordMd5 = md5(password);
+    const checkPasswordMd5 = md5(checkPassword);
+    const { error } = await fetchAddUser({
+      username,
+      password: passwordMd5,
+      checkPassword: checkPasswordMd5,
+      role,
+      permissions
+    });
     if (error) return;
     window.$message?.success($t('common.addSuccess'));
   }
 
   if (props.operateType === 'edit') {
     const { id, username, password, checkPassword, role, permissions } = model;
-    const { error } = await fetchEditUser({ id, username, password, checkPassword, role, permissions });
+    const passwordMd5 = md5(password);
+    const checkPasswordMd5 = md5(checkPassword);
+    const { error } = await fetchEditUser({
+      id,
+      username,
+      password: passwordMd5,
+      checkPassword: checkPasswordMd5,
+      role,
+      permissions
+    });
     if (error) return;
     window.$message?.success($t('common.updateSuccess'));
   }