diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index 9659f9dc0351525f8a115ea4ce8e59d9888133df..19fbb9317058d74112a3bd475be8f7c161816b53 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -781,7 +781,7 @@ read_item(str_list_t listfile, struct bbslist *entry, char *bbsname, int id, int
 		for (i = 0; i < 20; i++) {
 			if (!(isxdigit(fp[i*2]) && isxdigit(fp[i*2+1])))
 				break;
-			entry->ssh_fingerprint[i] = (HEX_CHAR_TO_INT(fp[i*2]) * 256) + HEX_CHAR_TO_INT(fp[i*2+1]);
+			entry->ssh_fingerprint[i] = (HEX_CHAR_TO_INT(fp[i*2]) * 16) + HEX_CHAR_TO_INT(fp[i*2+1]);
 		}
 		if (i == 20)
 			entry->has_fingerprint = true;
@@ -1745,6 +1745,7 @@ add_bbs(char *listpath, struct bbslist *bbs)
 		for (int i = 0; i < 20; i++) {
 			sprintf(&fp[i * 2], "%02x", bbs->ssh_fingerprint[i]);
 		}
+		fp[sizeof(fp)-1] = 0;
 		iniSetString(&inifile, bbs->name, "SSHFingerprint", fp, &ini_style);
 	}
 	iniSetBool(&inifile, bbs->name, "SFTPPublicKey", bbs->sftp_public_key, &ini_style);
diff --git a/src/syncterm/ssh.c b/src/syncterm/ssh.c
index 96af86f54045c925b7a11e722fac354e36ae311b..3221e4ce4e5a67a8afa48d289c4ee42e61f65f98 100644
--- a/src/syncterm/ssh.c
+++ b/src/syncterm/ssh.c
@@ -922,15 +922,17 @@ ssh_connect(struct bbslist *bbs)
 			int i;
 
 			slen = 0;
+			for (i = 0; i < sizeof(server_fp); i++) {
+				sprintf(&fpstr[i * 2], "%02x", server_fp[i]);
+			}
+			fpstr[sizeof(fpstr)-1] = 0;
 			if (bbs->has_fingerprint) {
 				char ofpstr[41];
 
-				for (i = 0; i < sizeof(server_fp); i++) {
-					sprintf(&fpstr[i * 2], "%02x", server_fp[i]);
-				}
 				for (i = 0; i < sizeof(server_fp); i++) {
 					sprintf(&ofpstr[i * 2], "%02x", bbs->ssh_fingerprint[i]);
 				}
+				ofpstr[sizeof(ofpstr)-1] = 0;
 				asprintf(&uifc.helpbuf, "`Fingerprint Changed`\n\n"
 				    "The server fingerprint has changed from the last known good connection.\n"
 				    "This may indicate someone is evesdropping on your connection.\n"