Node.JS Ciphers Info in version 15.x
After the deprecation of methods createCipher(…) and createDecipher(…) due to the introduction of createCipheriv(…) and createDecipheriv(…) a lot of us had issues when specifying the keys and IVs because sometimes the key would be the incorrect size and same for the IVs. I developed a kind of brute force tester to determine the correct values and keep them in a JSON file but honestly it was not ideal.
Today I was having a look at Crypto’s documentation and I saw that for version 15.x of Node.JS there is a method that gives us that information. It’s called getCipherInfo(…) and here’s how to use it:
const crypto = require('crypto'); crypto.getCiphers().forEach((cipher) => { // console.log(cipher); console.log(crypto.getCipherInfo(cipher)); // Added in: v15.0.0 });
The console output maybe similar to this:
{ mode: 'cbc', name: 'aes-128-cbc', nid: 419, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'aes-128-cbc-hmac-sha1', nid: 916, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'aes-128-cbc-hmac-sha256', nid: 948, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'ccm', name: 'id-aes128-ccm', nid: 896, blockSize: 1, ivLength: 12, keyLength: 16 } { mode: 'cfb', name: 'aes-128-cfb', nid: 421, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'aes-128-cfb1', nid: 650, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'aes-128-cfb8', nid: 653, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ctr', name: 'aes-128-ctr', nid: 904, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ecb', name: 'aes-128-ecb', nid: 418, blockSize: 16, keyLength: 16 } { mode: 'gcm', name: 'id-aes128-gcm', nid: 895, blockSize: 1, ivLength: 12, keyLength: 16 } { mode: 'ocb', name: 'aes-128-ocb', nid: 958, blockSize: 16, ivLength: 12, keyLength: 16 } { mode: 'ofb', name: 'aes-128-ofb', nid: 420, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'xts', name: 'aes-128-xts', nid: 913, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'aes-192-cbc', nid: 423, blockSize: 16, ivLength: 16, keyLength: 24 } { mode: 'ccm', name: 'id-aes192-ccm', nid: 899, blockSize: 1, ivLength: 12, keyLength: 24 } { mode: 'cfb', name: 'aes-192-cfb', nid: 425, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'aes-192-cfb1', nid: 651, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'aes-192-cfb8', nid: 654, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'ctr', name: 'aes-192-ctr', nid: 905, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'ecb', name: 'aes-192-ecb', nid: 422, blockSize: 16, keyLength: 24 } { mode: 'gcm', name: 'id-aes192-gcm', nid: 898, blockSize: 1, ivLength: 12, keyLength: 24 } { mode: 'ocb', name: 'aes-192-ocb', nid: 959, blockSize: 16, ivLength: 12, keyLength: 24 } { mode: 'ofb', name: 'aes-192-ofb', nid: 424, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cbc', name: 'aes-256-cbc', nid: 427, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'aes-256-cbc-hmac-sha1', nid: 918, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'aes-256-cbc-hmac-sha256', nid: 950, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'ccm', name: 'id-aes256-ccm', nid: 902, blockSize: 1, ivLength: 12, keyLength: 32 } { mode: 'cfb', name: 'aes-256-cfb', nid: 429, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'aes-256-cfb1', nid: 652, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'aes-256-cfb8', nid: 655, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'ctr', name: 'aes-256-ctr', nid: 906, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'ecb', name: 'aes-256-ecb', nid: 426, blockSize: 16, keyLength: 32 } { mode: 'gcm', name: 'id-aes256-gcm', nid: 901, blockSize: 1, ivLength: 12, keyLength: 32 } { mode: 'ocb', name: 'aes-256-ocb', nid: 960, blockSize: 16, ivLength: 12, keyLength: 32 } { mode: 'ofb', name: 'aes-256-ofb', nid: 428, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'xts', name: 'aes-256-xts', nid: 914, blockSize: 1, ivLength: 16, keyLength: 64 } { mode: 'cbc', name: 'aes-128-cbc', nid: 419, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'wrap', name: 'id-aes128-wrap', nid: 788, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'aes-192-cbc', nid: 423, blockSize: 16, ivLength: 16, keyLength: 24 } { mode: 'wrap', name: 'id-aes192-wrap', nid: 789, blockSize: 8, ivLength: 8, keyLength: 24 } { mode: 'cbc', name: 'aes-256-cbc', nid: 427, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'wrap', name: 'id-aes256-wrap', nid: 790, blockSize: 8, ivLength: 8, keyLength: 32 } { mode: 'cbc', name: 'aria-128-cbc', nid: 1066, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'ccm', name: 'aria-128-ccm', nid: 1120, blockSize: 1, ivLength: 12, keyLength: 16 } { mode: 'cfb', name: 'aria-128-cfb', nid: 1067, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'aria-128-cfb1', nid: 1080, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'aria-128-cfb8', nid: 1083, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ctr', name: 'aria-128-ctr', nid: 1069, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ecb', name: 'aria-128-ecb', nid: 1065, blockSize: 16, keyLength: 16 } { mode: 'gcm', name: 'aria-128-gcm', nid: 1123, blockSize: 1, ivLength: 12, keyLength: 16 } { mode: 'ofb', name: 'aria-128-ofb', nid: 1068, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'aria-192-cbc', nid: 1071, blockSize: 16, ivLength: 16, keyLength: 24 } { mode: 'ccm', name: 'aria-192-ccm', nid: 1121, blockSize: 1, ivLength: 12, keyLength: 24 } { mode: 'cfb', name: 'aria-192-cfb', nid: 1072, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'aria-192-cfb1', nid: 1081, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'aria-192-cfb8', nid: 1084, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'ctr', name: 'aria-192-ctr', nid: 1074, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'ecb', name: 'aria-192-ecb', nid: 1070, blockSize: 16, keyLength: 24 } { mode: 'gcm', name: 'aria-192-gcm', nid: 1124, blockSize: 1, ivLength: 12, keyLength: 24 } { mode: 'ofb', name: 'aria-192-ofb', nid: 1073, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cbc', name: 'aria-256-cbc', nid: 1076, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'ccm', name: 'aria-256-ccm', nid: 1122, blockSize: 1, ivLength: 12, keyLength: 32 } { mode: 'cfb', name: 'aria-256-cfb', nid: 1077, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'aria-256-cfb1', nid: 1082, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'aria-256-cfb8', nid: 1085, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'ctr', name: 'aria-256-ctr', nid: 1079, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'ecb', name: 'aria-256-ecb', nid: 1075, blockSize: 16, keyLength: 32 } { mode: 'gcm', name: 'aria-256-gcm', nid: 1125, blockSize: 1, ivLength: 12, keyLength: 32 } { mode: 'ofb', name: 'aria-256-ofb', nid: 1078, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'aria-128-cbc', nid: 1066, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'aria-192-cbc', nid: 1071, blockSize: 16, ivLength: 16, keyLength: 24 } { mode: 'cbc', name: 'aria-256-cbc', nid: 1076, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'bf-cbc', nid: 91, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'bf-cbc', nid: 91, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cfb', name: 'bf-cfb', nid: 93, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'ecb', name: 'bf-ecb', nid: 92, blockSize: 8, keyLength: 16 } { mode: 'ofb', name: 'bf-ofb', nid: 94, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'bf-cbc', nid: 91, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'camellia-128-cbc', nid: 751, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'camellia-128-cfb', nid: 757, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'camellia-128-cfb1', nid: 760, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'camellia-128-cfb8', nid: 763, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ctr', name: 'camellia-128-ctr', nid: 963, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ecb', name: 'camellia-128-ecb', nid: 754, blockSize: 16, keyLength: 16 } { mode: 'ofb', name: 'camellia-128-ofb', nid: 766, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'camellia-192-cbc', nid: 752, blockSize: 16, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'camellia-192-cfb', nid: 758, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'camellia-192-cfb1', nid: 761, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cfb', name: 'camellia-192-cfb8', nid: 764, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'ctr', name: 'camellia-192-ctr', nid: 967, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'ecb', name: 'camellia-192-ecb', nid: 755, blockSize: 16, keyLength: 24 } { mode: 'ofb', name: 'camellia-192-ofb', nid: 767, blockSize: 1, ivLength: 16, keyLength: 24 } { mode: 'cbc', name: 'camellia-256-cbc', nid: 753, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'camellia-256-cfb', nid: 759, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'camellia-256-cfb1', nid: 762, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cfb', name: 'camellia-256-cfb8', nid: 765, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'ctr', name: 'camellia-256-ctr', nid: 971, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'ecb', name: 'camellia-256-ecb', nid: 756, blockSize: 16, keyLength: 32 } { mode: 'ofb', name: 'camellia-256-ofb', nid: 768, blockSize: 1, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'camellia-128-cbc', nid: 751, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'camellia-192-cbc', nid: 752, blockSize: 16, ivLength: 16, keyLength: 24 } { mode: 'cbc', name: 'camellia-256-cbc', nid: 753, blockSize: 16, ivLength: 16, keyLength: 32 } { mode: 'cbc', name: 'cast5-cbc', nid: 108, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'cast5-cbc', nid: 108, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'cast5-cbc', nid: 108, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cfb', name: 'cast5-cfb', nid: 110, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'ecb', name: 'cast5-ecb', nid: 109, blockSize: 8, keyLength: 16 } { mode: 'ofb', name: 'cast5-ofb', nid: 111, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'stream', name: 'chacha20', nid: 1019, ivLength: 16, keyLength: 32 } { mode: 'stream', name: 'chacha20-poly1305', nid: 1018, ivLength: 12, keyLength: 32 } { mode: 'cbc', name: 'des-cbc', nid: 31, blockSize: 8, ivLength: 8, keyLength: 8 } { mode: 'cbc', name: 'des-cbc', nid: 31, blockSize: 8, ivLength: 8, keyLength: 8 } { mode: 'cfb', name: 'des-cfb', nid: 30, blockSize: 1, ivLength: 8, keyLength: 8 } { mode: 'cfb', name: 'des-cfb1', nid: 656, blockSize: 1, ivLength: 8, keyLength: 8 } { mode: 'cfb', name: 'des-cfb8', nid: 657, blockSize: 1, ivLength: 8, keyLength: 8 } { mode: 'ecb', name: 'des-ecb', nid: 29, blockSize: 8, keyLength: 8 } { mode: 'ecb', name: 'des-ede', nid: 32, blockSize: 8, keyLength: 16 } { mode: 'cbc', name: 'des-ede-cbc', nid: 43, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cfb', name: 'des-ede-cfb', nid: 60, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'ecb', name: 'des-ede', nid: 32, blockSize: 8, keyLength: 16 } { mode: 'ofb', name: 'des-ede-ofb', nid: 62, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'ecb', name: 'des-ede3', nid: 33, blockSize: 8, keyLength: 24 } { mode: 'cbc', name: 'des-ede3-cbc', nid: 44, blockSize: 8, ivLength: 8, keyLength: 24 } { mode: 'cfb', name: 'des-ede3-cfb', nid: 61, blockSize: 1, ivLength: 8, keyLength: 24 } { mode: 'cfb', name: 'des-ede3-cfb1', nid: 658, blockSize: 1, ivLength: 8, keyLength: 24 } { mode: 'cfb', name: 'des-ede3-cfb8', nid: 659, blockSize: 1, ivLength: 8, keyLength: 24 } { mode: 'ecb', name: 'des-ede3', nid: 33, blockSize: 8, keyLength: 24 } { mode: 'ofb', name: 'des-ede3-ofb', nid: 63, blockSize: 1, ivLength: 8, keyLength: 24 } { mode: 'ofb', name: 'des-ofb', nid: 45, blockSize: 1, ivLength: 8, keyLength: 8 } { mode: 'cbc', name: 'des-ede3-cbc', nid: 44, blockSize: 8, ivLength: 8, keyLength: 24 } { mode: 'wrap', name: 'id-smime-alg-cms3deswrap', nid: 246, blockSize: 8, keyLength: 24 } { mode: 'cbc', name: 'desx-cbc', nid: 80, blockSize: 8, ivLength: 8, keyLength: 24 } { mode: 'cbc', name: 'desx-cbc', nid: 80, blockSize: 8, ivLength: 8, keyLength: 24 } { mode: 'ccm', name: 'id-aes128-ccm', nid: 896, blockSize: 1, ivLength: 12, keyLength: 16 } { mode: 'gcm', name: 'id-aes128-gcm', nid: 895, blockSize: 1, ivLength: 12, keyLength: 16 } { mode: 'wrap', name: 'id-aes128-wrap', nid: 788, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'wrap', name: 'id-aes128-wrap-pad', nid: 897, blockSize: 8, ivLength: 4, keyLength: 16 } { mode: 'ccm', name: 'id-aes192-ccm', nid: 899, blockSize: 1, ivLength: 12, keyLength: 24 } { mode: 'gcm', name: 'id-aes192-gcm', nid: 898, blockSize: 1, ivLength: 12, keyLength: 24 } { mode: 'wrap', name: 'id-aes192-wrap', nid: 789, blockSize: 8, ivLength: 8, keyLength: 24 } { mode: 'wrap', name: 'id-aes192-wrap-pad', nid: 900, blockSize: 8, ivLength: 4, keyLength: 24 } { mode: 'ccm', name: 'id-aes256-ccm', nid: 902, blockSize: 1, ivLength: 12, keyLength: 32 } { mode: 'gcm', name: 'id-aes256-gcm', nid: 901, blockSize: 1, ivLength: 12, keyLength: 32 } { mode: 'wrap', name: 'id-aes256-wrap', nid: 790, blockSize: 8, ivLength: 8, keyLength: 32 } { mode: 'wrap', name: 'id-aes256-wrap-pad', nid: 903, blockSize: 8, ivLength: 4, keyLength: 32 } { mode: 'wrap', name: 'id-smime-alg-cms3deswrap', nid: 246, blockSize: 8, keyLength: 24 } { mode: 'cbc', name: 'idea-cbc', nid: 34, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'idea-cbc', nid: 34, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cfb', name: 'idea-cfb', nid: 35, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'ecb', name: 'idea-ecb', nid: 36, blockSize: 8, keyLength: 16 } { mode: 'ofb', name: 'idea-ofb', nid: 46, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'rc2-cbc', nid: 37, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'rc2-cbc', nid: 37, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cbc', name: 'rc2-40-cbc', nid: 98, blockSize: 8, ivLength: 8, keyLength: 5 } { mode: 'cbc', name: 'rc2-40-cbc', nid: 98, blockSize: 8, ivLength: 8, keyLength: 5 } { mode: 'cbc', name: 'rc2-64-cbc', nid: 166, blockSize: 8, ivLength: 8, keyLength: 8 } { mode: 'cbc', name: 'rc2-64-cbc', nid: 166, blockSize: 8, ivLength: 8, keyLength: 8 } { mode: 'cbc', name: 'rc2-cbc', nid: 37, blockSize: 8, ivLength: 8, keyLength: 16 } { mode: 'cfb', name: 'rc2-cfb', nid: 39, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'ecb', name: 'rc2-ecb', nid: 38, blockSize: 8, keyLength: 16 } { mode: 'ofb', name: 'rc2-ofb', nid: 40, blockSize: 1, ivLength: 8, keyLength: 16 } { mode: 'stream', name: 'rc4', nid: 5, keyLength: 16 } { mode: 'stream', name: 'rc4-40', nid: 97, keyLength: 5 } { mode: 'stream', name: 'rc4-hmac-md5', nid: 915, keyLength: 16 } { mode: 'cbc', name: 'seed-cbc', nid: 777, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'seed-cbc', nid: 777, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'seed-cfb', nid: 779, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ecb', name: 'seed-ecb', nid: 776, blockSize: 16, keyLength: 16 } { mode: 'ofb', name: 'seed-ofb', nid: 778, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'sm4-cbc', nid: 1134, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cbc', name: 'sm4-cbc', nid: 1134, blockSize: 16, ivLength: 16, keyLength: 16 } { mode: 'cfb', name: 'sm4-cfb', nid: 1137, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ctr', name: 'sm4-ctr', nid: 1139, blockSize: 1, ivLength: 16, keyLength: 16 } { mode: 'ecb', name: 'sm4-ecb', nid: 1133, blockSize: 16, keyLength: 16 } { mode: 'ofb', name: 'sm4-ofb', nid: 1135, blockSize: 1, ivLength: 16, keyLength: 16 }
This is the result for version 15.12.0, hope it helps!