www.pudn.com > ejbca_3_5_3(1).zip > change_p12_pwd.c
/* This program changes the password of a .p12 file */ /* Author: James A. Rome */ /* June 28, 2006 */ /* This program is freely available for any use */ #include#include #include #include #include #include int main(int argc, char * argv[]) { char oldpw[257], newpw[257], newpw2[257]; int err = 0; FILE *in_file, *out_file; PKCS12 *p12; EVP_PKEY *pkey; X509 *cert; STACK_OF(X509) *ca = NULL; if(argc < 2) { printf("Usage: change_p12_pwd infile.p12 outfile.p12\n"); exit(1); } SSLeay_add_all_algorithms(); ERR_load_crypto_strings(); if(!(in_file = fopen(argv[1], "r"))) { fprintf(stderr, "Error reading PKCS#12 file\n"); ERR_print_errors_fp(stderr); exit (1); } printf("Enter the old password for this p12 file: "); scanf("%256s", &oldpw); do { printf("Enter the new password for this p12 file: "); scanf("%256s", &newpw); printf("Reenter the new password for this p12 file: "); scanf("%256s", &newpw2); } while ( strncmp(newpw, newpw2, 256) != 0); /* We now have the new and old passwords and can change it */ /* Make the p12 structure */ p12 = d2i_PKCS12_fp(in_file, NULL); fclose (in_file); if (!p12) { fprintf(stderr, "Error reading PKCS#12 file\n"); ERR_print_errors_fp(stderr); exit (1); } if (!PKCS12_parse(p12, oldpw, &pkey, &cert, &ca)) { fprintf(stderr, "Error parsing PKCS#12 file\n"); ERR_print_errors_fp(stderr); exit (1); } if (!(PKCS12_newpass(p12, oldpw,newpw))) { fprintf(stderr, "Error changing password\n"); ERR_print_errors_fp(stderr); exit (1); } if (!(out_file = fopen(argv[2], "wb"))) { fprintf(stderr, "Error opening file %s\n", argv[2]); ERR_print_errors_fp(stderr); exit(1); } i2d_PKCS12_fp(out_file, p12); PKCS12_free(p12); fclose(out_file); }