কমান্ড লাইন থেকে গণনা করা bcrypt হ্যাশ


19

আমি আমার পাসওয়ার্ডের bcrypt হ্যাশ গণনা করতে চাই ।

এমন কোনও ওপেন সোর্স কমান্ড লাইন টুল আছে যা তা করবে?

আমি সিঙ্কিং কনফিগারেশন ফাইলে এই হ্যাশটি ব্যবহার করব (এমনকি যদি আমি এখান থেকে জানি যে আমি গি বিভাগে ব্যবহারকারী এবং পাসওয়ার্ড মুছে ফেলার জন্য কনফিগার ফাইলটি সম্পাদনা করে পাসওয়ার্ডটি পুনরায় সেট করতে পারি, তবে সিঙ্কিংটি পুনরায় চালু করতে পারি)।

উত্তর:


27

আপনি অ্যাপাচি-ইউসস প্যাকেজটি htpasswdথেকে (আব) ব্যবহার করতে পারেন, তবে আপনার কাছে ভার্সন ২.৪ বা তার বেশি রয়েছে।

htpasswd -bnBC 10 "" password | tr -d ':\n'

-bদ্বিতীয় কমান্ড আর্গুমেন্ট থেকে পাসওয়ার্ড গ্রহণ করে
-nহ্যাশটি স্ট্রিডআউটে প্রিন্ট করে পরিবর্তে কোনও ফাইলের কাছে লেখার পরিবর্তে
-Bবিসিআরপিট ব্যবহারের
-C 10জন্য বিসিক্রিপটি ব্যয় নির্ধারণ করে 10

খালি htpasswd কমান্ডটি <name>: <hash> বিন্যাসে আউটপুট দেয় এবং তারপরে দুটি নতুন লাইন। সুতরাং নামের জন্য খালি স্ট্রিং এবং trকোলন এবং নিউলাইনগুলি কেটে ফেলা হয়।

কমান্ডটি প্রিপিক্সের সাথে বিক্রিপ্ট আউটপুট দেয় $2y$যা কিছু ব্যবহারের ক্ষেত্রে সমস্যা হতে পারে তবে সহজেই অন্যের সাথে সংশোধন করা যায় sedযেহেতু ওপেনবিএসডি বৈকল্পিকটি $2a$নির্দিষ্ট ক্রিপ্ট_ ব্লোফিশ ফর্মের ব্যবহারের সাথে সামঞ্জস্যপূর্ণ $2y$

htpasswd -bnBC 10 "" password | tr -d ':\n' | sed 's/$2y/$2a/'

Htpasswd ম্যান পৃষ্ঠায় লিঙ্ক করুন: https://httpd.apache.org/docs/2.4/program/htpasswd.html বিসিআরআইপি
বৈকল্পিক সম্পর্কে বিশদ: /programming//a/36225192/6732096


জাভা স্প্রিং সিকিউরিটির বিসিক্রিপ্ট প্রয়োগে এই সংস্করণটিতে সমস্যা রয়েছে। পাসওয়ার্ড হ্যাশ করতে হবে একটি নাল অক্ষর দিয়ে। স্প্রিং সিকিউরিটি সঠিকভাবে এটি করছে বলে মনে হচ্ছে। আমি মনে করি htpasswd এটি সঠিকভাবে করছে না।
k_o_

@ কে_ও_: আপনি কি "সমস্যা আছে" এ সম্পর্কে আরও নির্দিষ্ট করে বলতে পারেন? সমস্ত বিসিক্রিপ্ট বাস্তবায়ন নাল-চরিত্রের টার্মিনেটর ব্যবহার করে। কিছু, পাই-বিক্রিপ্টের মতো নাল-চরিত্রটি পাসওয়ার্ডের একটি অংশ নয় তা নিশ্চিত করার জন্য এমনকি অতিরিক্ত চেক রয়েছে। আপনি গিটহাবে অ্যাপাচি বাস্তবায়ন পরীক্ষা করতে পারেন । আমি সমস্যা ছাড়াই একাধিক স্প্রিং অ্যাপ্লিকেশনগুলির জন্য ডাটাবেস রেকর্ডগুলি পপুলেশন করার জন্য অতিরিক্ত এসডের সাথে এইচটিপ্যাসওউড ব্যবহার করছি (এটি আসলে আমি কীভাবে উত্তরে এসেছি)।
ডিসএসেমব্লার

আমি ধরেই নিচ্ছি যে স্প্রিং এবং এইচটিপ্যাসউইডির মধ্যে বিভিন্ন এনকোডিংগুলি ব্যাখ্যা করতে নাল চরিত্রটি ছেড়ে যাওয়া htpasswd এর সমস্যা was অন্য উত্তরের পাইথন পদ্ধতির ব্যবহার করে বিক্রিপ্ট থেকে আউটপুটটি স্প্রিংয়ের মতো একই ফলাফল তৈরি করছিল, কিন্তু এইচটিপ্যাসউইড ছিল না। হতে পারে আমার এইচটিপ্যাসওবিডি সংস্করণটিও বেশ পুরানো, আমি মনে করি বাইনারিটি 2 বছর থেকে আপডেট হয়নি।
k_o_

11

আপনি পাইথন লাইব্রেরি ব্যবহার করতে পারেন। আমার ফেডোরা সিস্টেমে আমি এটি করেছি:

sudo dnf search bcrypt

(sudo কেবলমাত্র কোনও ব্যবহারকারী ডিএনএফ ক্যাশে স্থান নষ্ট করা এড়াতে) এবং ফলাফল থেকে দেখতে পাওয়া যায় যে পাইথন 2 এবং পাইথন 3 প্যাকেজ রয়েছে:

py-bcrypt.x86_64 : Python bindings for OpenBSD's Blowfish password hashing code
python3-py-bcrypt.x86_64 : Python 3 bindings for OpenBSD's Blowfish password hashing code

পাইথন 2 সংস্করণ ইনস্টল করুন এবং প্যাকেজে ফাইলগুলি তালিকাভুক্ত করুন:

sudo dnf install py-bcrypt.x86_64
rpm -ql py-bcrypt.x86_64

এটি একটি ফাইল রয়েছে তা দেখায় /usr/lib64/python2.7/site-packages/bcrypt/__init__.pyযাতে আমি ডকুমেন্টেশনটি পেতে পারি

pydoc bcrypt

এটি আমাকে নীচের কমান্ডটি লেখার জন্য যথেষ্ট পরিমাণে দেখায় যা স্ট্রিংটি হ্যাশ করবে "password":

$ python -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(log_rounds=10)))'
$2a$10$vWFRZgbOx6RKOKYxCTtyWuMJM60E90Vdm/.0nj.X/o3dYUxvQ/2Dm

পরিবর্তে bcryptব্যবহারের পরবর্তী সংস্করণগুলির rounds=জন্য log_rounds=


2
+1 টি। আপনার sudoচালনার দরকার নেই এফটিআর dnf search, এটি একটি স্ট্যান্ডার্ড ব্যবহারকারী হিসাবে কাজ করে।
স্টিফেন কিট

1
এপ্রিল 2018 পর্যন্ত প্যারামিটারটি এটি তৈরিতে log_roundsপরিবর্তিত হয়েছে বলে মনে হচ্ছে । roundspython -c 'import bcrypt; print(bcrypt.hashpw("password", bcrypt.gensalt(rounds=10)))'
হর্স্টকেভিন

4

@Disassemblerএর উত্তরে অতিরিক্ত :

  • কমান্ড লাইন থেকে পাসওয়ার্ডগুলি প্রবেশ করা ভাল ধারণা নয় (যেমন পাসওয়ার্ডটি দেখতে পারা যায় ps)
  • 15 জটিলতা / পাসওয়ার্ড তৈরির গতির জন্য একটি ভাল ভারসাম্য

জন্য স্ক্রিপ্ট আবরণ htpasswd& bcrypt:

#!/bin/sh

## bcrypt passwd generator ##
#############################
CMD=$(which htpasswd 2>/dev/null)
OPTS="-nBC 15"
USERNAME=$1

usage() {
        local script=$(basename $0)
        cat <<EOF
$script: Generate Bcrypt Hashed Passwords using htpasswd

Usage: $script username
EOF
        exit 1
}

check_config() {
    if [ -z $CMD ]; then
        printf "Exiting: htpasswd is missing.\n"
        exit 1
    fi

    if [ -z "$USERNAME" ]; then
            usage
    fi
}

check_config $USERNAME
printf "Generating Bcrypt hash for username: $USERNAME\n\n"
$CMD $OPTS $USERNAME
exit $?

2
এবং আপনি যদি কোনও স্থান দিয়ে কমান্ড লাইনটি শুরু না করেন তবে পাসওয়ার্ডটি আপনার শেল ইতিহাসে চলে যাবে (এমন একটি ফাইল যা সম্ভবত এনক্রিপ্ট করা হয়নি)।
গ্যাব্রিয়েল ডেভিলার্স

@ গ্যাব্রিয়েল ডেভিলার্স আপ, এখানে একই। আমি ওপিটিএসে "-i" এবং "" দ্বিতীয় থেকে শেষের লাইনে যুক্ত করেছি।
তোয়াই

rootব্যবহারকারীর জন্য বেস এবং মাইএসকিউএল ইতিহাসের জন্য একটি প্রতীকী লিঙ্ক তৈরি করা ভাল ধারণা /dev/null
স্টুয়ার্ট কার্ডাল

1
@ গ্যাব্রিয়েল ডেভিলার্সের মন্তব্য সম্পর্কে, সম্ভবত উল্লেখ করা উচিত যে শুরুতে একটি স্থান যুক্ত করা সর্বদা শেল ইতিহাস থেকে কোনও আইটেম আড়াল করে না - শেল এবং সেটিংসের উপর নির্ভর করে।
কাঁপানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.