แพ็คเกจ Bouncy Castle Crypto เป็นการนำ Java ไปใช้อัลกอริธึมการเข้ารหัส ได้รับการพัฒนาโดย Legion of the Bouncy Castle ซึ่งเป็นองค์กรการกุศลที่จดทะเบียนในออสเตรเลีย ด้วยความช่วยเหลือเล็กน้อย! The Legion และข้อมูลล่าสุดเกี่ยวกับแพ็คเกจนี้มีอยู่ที่ https://www.bouncycastle.org
The Legion ยังรับทราบอย่างสุดซึ้งต่อการมีส่วนร่วมของผู้อื่นในแพ็คเกจนี้ (ดูรายการปัจจุบันที่นี่) หากคุณต้องการมีส่วนร่วมในความพยายามของเรา โปรดติดต่อเราหรือเยี่ยมชมหน้าการบริจาคของเรา สนับสนุนงานเฉพาะบางอย่าง หรือซื้อสัญญาการสนับสนุนผ่าน Crypto Workshop (ปัจจุบันเป็นส่วนหนึ่งของ Keyfactor)
แพ็คเกจได้รับการจัดระเบียบเพื่อให้มี API น้ำหนักเบาที่เหมาะสำหรับการใช้งานในทุกสภาพแวดล้อม (รวมถึง J2ME ที่เพิ่งเปิดตัว) พร้อมโครงสร้างพื้นฐานเพิ่มเติมเพื่อให้สอดคล้องกับอัลกอริทึมกับกรอบงาน JCE
ยกเว้นในกรณีที่ระบุไว้เป็นอย่างอื่น ซอฟต์แวร์นี้เผยแพร่ภายใต้ใบอนุญาตตามใบอนุญาต MIT X Consortium หากต้องการดูใบอนุญาต โปรดดูที่นี่ ไลบรารี OpenPGP ยังรวมไลบรารี BZIP2 ที่ได้รับการดัดแปลงซึ่งได้รับอนุญาตภายใต้ Apache Software License เวอร์ชัน 2.0
หมายเหตุ : แผนผังต้นทางนี้ไม่ใช่เวอร์ชัน FIPS ของ API หากคุณสนใจเวอร์ชัน FIPS ของเรา โปรดติดต่อเราโดยตรงที่ [email protected]
ไฟล์ bc_maven_public_key.asc มีกุญแจสาธารณะที่ใช้ในการลงนามสิ่งประดิษฐ์ของเราบน Maven Central คุณจะต้องใช้
gpg -o bc_maven_public_key.gpg --dearmor bc_maven_public_key.asc
เพื่อรักที่สำคัญก่อนการใช้งาน เมื่อเสร็จแล้ว สามารถตรวจสอบไฟล์ได้โดยใช้:
gpg --no-default-keyring --keyring ./bc_maven_public_key.gpg --verify file_name.jar.asc file_name.jar
หมายเหตุ: จำเป็นต้องมี ./ หน้าชื่อไฟล์คีย์เพื่อบอกให้ gpg ค้นหาในเครื่อง
โปรเจ็กต์นี้สามารถสร้างและทดสอบด้วย JDK21 ได้แล้ว
หากสคริปต์บิลด์ตรวจพบ BC_JDK8, BC_JDK11, BC_JDK17 สคริปต์จะเพิ่มการพึ่งพางานทดสอบที่ใช้ JVM ที่ระบุโดยตัวแปรสภาพแวดล้อมเหล่านั้นโดยเฉพาะให้กับงานทดสอบปกติ สคริปต์อาศัย JAVA_HOME ในการรับ Java 21 หากมีการใช้งาน
เรารองรับการทดสอบบน JVM ที่เฉพาะเจาะจง เนื่องจากเป็นวิธีเดียวที่จะแน่ใจได้ว่าไลบรารีนั้นเข้ากันได้
ตัวแปรสภาพแวดล้อมต่อไปนี้สามารถเลือกชี้ไปที่ JAVA_HOME สำหรับแต่ละเวอร์ชัน JVM ได้
export BC_JDK8=/path/to/java8 export BC_JDK11=/path/to/java11 export BC_JDK17=/path/to/java17
ตอนนี้โปรเจ็กต์ใช้ gradlew
ซึ่งสามารถเรียกใช้ได้เช่น:
# from the root of the project # Ensure JAVA_HOME points to JDK 21 or higher JAVA_HOME or that # gradlew can find a java 21 installation to use. ./gradlew clean build
สคริปต์ gradle จะพยายามตรวจสอบการมีอยู่ของมัน แต่ไม่ใช่ความถูกต้องของค่าของพวกเขา
บางโปรเจ็กต์ย่อยผลิต jar แบบหลายรีลีส และ jar เหล่านี้สามารถทดสอบได้กับเวอร์ชัน jvm ที่แตกต่างกันโดยเฉพาะ
หากมีการกำหนด vars ของ env:
export BC_JDK8=/path/to/java8 export BC_JDK11=/path/to/java11 export BC_JDK17=/path/to/java17
หากมีเพียง Java 21 JDK เท่านั้น งานทดสอบปกติและ test21 จะถูกรันเท่านั้น
Clean room JCE สำหรับใช้กับ JDK 1.1 ถึง JDK 1.3 อยู่ในไดเร็กทอรี jce/src/main/java ตั้งแต่ JDK 1.4 และใหม่กว่า JCE มาพร้อมกับ JVM แหล่งที่มาสำหรับ JDK รุ่นหลังจะติดตามความคืบหน้าที่เกิดขึ้นใน JCE เวอร์ชันใหม่กว่า หากคุณใช้ JDK เวอร์ชันใหม่กว่าซึ่งมาพร้อมกับการติดตั้ง JCE โปรด อย่า รวมไดเร็กทอรี jce เป็นไฟล์ต้นฉบับ เนื่องจากจะขัดแย้งกับ JCE API ที่ติดตั้งกับ JDK ของคุณ
โมดูล หลัก มีฟังก์ชันการทำงานทั้งหมดใน API น้ำหนักเบา
โมดูล prov มีฟังก์ชันการทำงานของผู้ให้บริการ JCA/JCE ทั้งหมด
โมดูล util คือบ้านสำหรับโค้ดที่ใช้โดยโมดูลอื่นที่ไม่จำเป็นต้องอยู่ใน prov ในขณะนี้ นี่คือคลาส ASN.1 ส่วนใหญ่สำหรับโมดูล PKIX
โมดูล pkix เป็นแหล่งรวมโค้ดสำหรับการสร้างใบรับรอง X.509 และ API สำหรับมาตรฐานที่ใช้ ASN.1 เช่น CMS, TSP, PKCS#12, OCSP, CRMF และ CMP
โมดูล เมล มี S/MIME API ที่สร้างจาก CMS
โมดูล pg คือบ้านของโค้ดที่ใช้เพื่อรองรับ OpenPGP
โมดูล tls คือบ้านสำหรับโค้ดที่ใช้กับ TLS API และผู้ให้บริการ JSSE ทั่วไป
สคริปต์การสร้างที่มาพร้อมกับการแจกจ่ายแบบเต็มช่วยให้สามารถสร้างรีลีสที่แตกต่างกันได้โดยใช้แผนผังต้นทางที่แตกต่างกัน ในขณะที่ไม่รวมคลาสที่ไม่เหมาะสม และคัดลอกในคลาสความเข้ากันได้ที่จำเป็นจากไดเร็กทอรีที่มีคลาสความเข้ากันได้ที่เหมาะสมสำหรับการแจกจ่าย
หากคุณต้องการลองสร้างบิลด์สำหรับตัวคุณเองโดยใช้สภาพแวดล้อมของคุณเอง วิธีที่ดีที่สุดคือเริ่มต้นด้วยบิลด์สำหรับการแจกจ่ายที่คุณสนใจ ตรวจสอบให้แน่ใจว่าบิลด์นั้น จากนั้นแก้ไขสคริปต์บิลด์ของคุณให้ดำเนินการ การยกเว้นที่จำเป็นและสำเนาไฟล์สำหรับการตั้งค่าของคุณ ไม่เช่นนั้นคุณอาจได้รับข้อยกเว้นที่ไม่พบคลาส ข้อแม้สุดท้ายคือ เนื่องจากการกระจาย j2me มีคลาสความเข้ากันได้บางส่วนที่เริ่มต้นในแพ็คเกจ java คุณจึงจำเป็นต้องใช้ obfuscator เพื่อเปลี่ยนชื่อแพ็คเกจก่อนที่จะพยายามนำเข้า midlet โดยใช้ BC API
สิ่งสำคัญ : คุณจะต้องตรวจสอบพื้นที่เก็บข้อมูล bc-test-data ในระดับเดียวกับพื้นที่เก็บข้อมูล bc-java หากคุณต้องการรันการทดสอบ
หากต้องการดูตัวอย่าง ให้ดูโปรแกรมทดสอบในแพ็คเกจ:
org.bouncycastle.crypto.test
org.bouncycastle.jce.provider.test
org.bouncycastle.cms.ทดสอบ
org.bouncycastle.mail.smime.test
org.bouncycastle.openpgp.test
org.bouncycastle.tsp.ทดสอบ
นอกจากนี้ยังมีตัวอย่างโปรแกรมเฉพาะสำหรับการจัดการกับ SMIME และ OpenPGP สามารถพบได้ใน:
org.bouncycastle.mail.smime.examples
org.bouncycastle.openpgp.examples
สำหรับผู้ที่สนใจ มีรายชื่อผู้รับจดหมายเข้าร่วมโครงการ จำนวน 2 รายชื่อ หากต้องการสมัครสมาชิกให้ใช้ลิงก์ด้านล่างและรวมคำว่าสมัครสมาชิกไว้ในเนื้อหาข้อความ (หากต้องการยกเลิกการสมัคร ให้แทนที่ สมัครรับข้อมูล ด้วยยกเลิก การสมัคร ในเนื้อหาข้อความ)
ประกาศ[email protected]
รายชื่ออีเมลนี้มีไว้สำหรับประกาศออกใหม่เท่านั้น สมาชิกทั่วไปไม่สามารถโพสต์ได้
[email protected]
รายชื่อผู้รับจดหมายนี้มีไว้สำหรับการอภิปรายเกี่ยวกับการพัฒนาแพ็คเกจ ซึ่งรวมถึงจุดบกพร่อง ความคิดเห็น การร้องขอการปรับปรุง คำถามเกี่ยวกับการใช้งานหรือการดำเนินการ
หมายเหตุ: คุณต้องสมัครสมาชิกเพื่อส่งอีเมลไปยังรายชื่อผู้รับจดหมายด้านบน
หากคุณต้องการให้ข้อเสนอแนะโดยตรงกับสมาชิกของ The Legion โปรดใช้ [email protected] หากคุณต้องการช่วยให้โครงการนี้อยู่รอด โปรดพิจารณาการบริจาค
สำหรับการรายงานข้อบกพร่อง/คำขอ คุณสามารถรายงานปัญหาได้ที่นี่บน GitHub หรือผ่านทาง Feedback-Crypto หากจำเป็น เราจะยอมรับคำขอดึงตามพื้นที่เก็บข้อมูลนี้เช่นกัน แต่เฉพาะบนพื้นฐานที่ว่ารหัสใด ๆ ที่รวมอยู่นั้นสามารถแจกจ่ายภายใต้ใบอนุญาต Bouncy Castle
สนุก!