feat(new-tool): hmac generator
This commit is contained in:
		
							parent
							
								
									02c4963531
								
							
						
					
					
						commit
						1bc6380c6f
					
				
							
								
								
									
										98
									
								
								src/tools/hmac-generator/hmac-generator.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/tools/hmac-generator/hmac-generator.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | ||||
| <template> | ||||
|   <div> | ||||
|     <n-form-item label="Plain text to compute the hash"> | ||||
|       <n-input v-model:value="plainText" type="textarea" placeholder="Enter the text to compute the hash..." /> | ||||
|     </n-form-item> | ||||
|     <n-form-item label="Secret key"> | ||||
|       <n-input v-model:value="secret" placeholder="Enter the secret key..." /> | ||||
|     </n-form-item> | ||||
|     <n-space item-style="flex:1 1 0"> | ||||
|       <n-form-item label="Hashing function"> | ||||
|         <n-select | ||||
|           v-model:value="hashFunction" | ||||
|           placeholder="Select an hashing function..." | ||||
|           :options="Object.keys(algos).map((label) => ({ label, value: label }))" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|       <n-form-item label="Output encoding"> | ||||
|         <n-select | ||||
|           v-model:value="encoding" | ||||
|           placeholder="Select the result encoding..." | ||||
|           :options="[ | ||||
|             { | ||||
|               label: 'Binary (base 2)', | ||||
|               value: 'Bin', | ||||
|             }, | ||||
|             { | ||||
|               label: 'Hexadecimal (base 16)', | ||||
|               value: 'Hex', | ||||
|             }, | ||||
|             { | ||||
|               label: 'Base64 (base 64)', | ||||
|               value: 'Base64', | ||||
|             }, | ||||
|             { | ||||
|               label: 'Base64-url (base 64 with url safe chars)', | ||||
|               value: 'Base64url', | ||||
|             }, | ||||
|           ]" | ||||
|         /> | ||||
|       </n-form-item> | ||||
|     </n-space> | ||||
|     <n-form-item label="HMAC of your text"> | ||||
|       <n-input readonly :value="hmac" type="textarea" placeholder="The result of the HMAC..." /> | ||||
|     </n-form-item> | ||||
|     <n-space justify="center"> | ||||
|       <n-button secondary @click="copy()">Copy HMAC</n-button> | ||||
|     </n-space> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup lang="ts"> | ||||
| import { useCopy } from '@/composable/copy.js'; | ||||
| import { | ||||
|   enc, | ||||
|   HmacMD5, | ||||
|   HmacRIPEMD160, | ||||
|   HmacSHA1, | ||||
|   HmacSHA224, | ||||
|   HmacSHA256, | ||||
|   HmacSHA3, | ||||
|   HmacSHA384, | ||||
|   HmacSHA512, | ||||
|   lib, | ||||
| } from 'crypto-js'; | ||||
| import { computed, ref } from 'vue'; | ||||
| import { convertHexToBin } from '../hash-text/hash-text.service.js'; | ||||
| 
 | ||||
| const algos = { | ||||
|   MD5: HmacMD5, | ||||
|   RIPEMD160: HmacRIPEMD160, | ||||
|   SHA1: HmacSHA1, | ||||
|   SHA3: HmacSHA3, | ||||
|   SHA224: HmacSHA224, | ||||
|   SHA256: HmacSHA256, | ||||
|   SHA384: HmacSHA384, | ||||
|   SHA512: HmacSHA512, | ||||
| } as const; | ||||
| 
 | ||||
| type Encoding = keyof typeof enc | 'Bin'; | ||||
| 
 | ||||
| function formatWithEncoding(words: lib.WordArray, encoding: Encoding) { | ||||
|   if (encoding === 'Bin') { | ||||
|     return convertHexToBin(words.toString(enc.Hex)); | ||||
|   } | ||||
|   return words.toString(enc[encoding]); | ||||
| } | ||||
| 
 | ||||
| const plainText = ref(''); | ||||
| const secret = ref(''); | ||||
| const hashFunction = ref<keyof typeof algos>('SHA256'); | ||||
| const encoding = ref<Encoding>('Hex'); | ||||
| const hmac = computed(() => | ||||
|   formatWithEncoding(algos[hashFunction.value](plainText.value, secret.value), encoding.value), | ||||
| ); | ||||
| const { copy } = useCopy({ source: hmac }); | ||||
| </script> | ||||
| 
 | ||||
| <style lang="less" scoped></style> | ||||
							
								
								
									
										12
									
								
								src/tools/hmac-generator/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/tools/hmac-generator/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | ||||
| import { ShortTextRound } from '@vicons/material'; | ||||
| import { defineTool } from '../tool'; | ||||
| 
 | ||||
| export const tool = defineTool({ | ||||
|   name: 'Hmac generator', | ||||
|   path: '/hmac-generator', | ||||
|   description: | ||||
|     'Computes a hash-based message authentication code (HMAC) using a secret key and your favorite hashing function.', | ||||
|   keywords: ['hmac', 'generator', 'MD5', 'SHA1', 'SHA256', 'SHA224', 'SHA512', 'SHA384', 'SHA3', 'RIPEMD160'], | ||||
|   component: () => import('./hmac-generator.vue'), | ||||
|   icon: ShortTextRound, | ||||
| }); | ||||
| @ -16,6 +16,7 @@ import { tool as cypher } from './encryption'; | ||||
| import { tool as etaCalculator } from './eta-calculator'; | ||||
| import { tool as gitMemo } from './git-memo'; | ||||
| import { tool as hashText } from './hash-text'; | ||||
| import { tool as hmacGenerator } from './hmac-generator'; | ||||
| import { tool as htmlEntities } from './html-entities'; | ||||
| import { tool as baseConverter } from './integer-base-converter'; | ||||
| import { tool as jsonViewer } from './json-viewer'; | ||||
| @ -36,7 +37,7 @@ export const toolsByCategory: ToolCategory[] = [ | ||||
|   { | ||||
|     name: 'Crypto', | ||||
|     icon: LockOpen, | ||||
|     components: [tokenGenerator, hashText, bcrypt, uuidGenerator, cypher, bip39], | ||||
|     components: [tokenGenerator, hashText, bcrypt, uuidGenerator, cypher, bip39, hmacGenerator], | ||||
|   }, | ||||
|   { | ||||
|     name: 'Converter', | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user